C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: ListViewのSelectedIndexがずれる


(過去ログ 100 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■59506 / inTopicNo.1)  ListViewのSelectedIndexがずれる
  
□投稿者/ natsu (1回)-(2011/05/29(Sun) 11:07:44)

分類:[ASP.NET (C#)] 

お世話になっております。
ずっと困っている問題があり、解決したいと思い投稿させていただきます。

環境
ASP.NET4
C#

ASP.NETにて以下のようなWEBアプリケーションを作成しています。
画面左側一覧ListViewで行を選択すると画面右側に詳細が表示され、
画面右側にて更新・追加・削除が行えます。
<画面左側:ListViewで一覧表示>  <画面右側:詳細表示>
【コード】【名前】
 001   あいうえお            コード:001
 002   かきくけこ            名前:あいうえお
 003   さしすせそ            〜〜:〜〜〜〜
 004   たちつてと            〜〜:〜〜〜〜

例えば001を選択し、順番が一覧の最後に来る編集をしたとします。
しかしながら、ポストバックして画面が再表示された際、
一覧のListViewでは一番上にきた002が選択され、
右側には002の詳細が表示されてしまいます。

やりたいことは順序の変更に関係なく、ポストバック前に
ListViewで選択されていた行をポストバック後にも選択した
状態にしたいです。

お手数とは思いますが、何卒ご教授の程よろしくお願いいたします。



引用返信 編集キー/
■59515 / inTopicNo.2)  Re[1]: ListViewのSelectedIndexがずれる
□投稿者/ hs (247回)-(2011/05/30(Mon) 10:00:40)
No59506 (natsu さん) に返信

私の場合、一覧は更新後、主キーを基準に、ループで該当Itemにフォーカスを当てております。
  For Each lv As ListViewItem In Me.Listview.Items
    '0列目はコードとする。
    If lv.SubItems(0).Text = Me.コード.Text Then
      lv.Selected = True
      lv.Focused = True
      Exit For
    End If
  Next

削除の時は、
  For Each lv As ListViewItem In Me.Listview.SelectedItems

    '削除コマンド実行

    Me.Listview.Items.Remove(lv)

  Next

のようにItemをRemoveだけを実行しております。
引用返信 編集キー/
■59516 / inTopicNo.3)  Re[2]: ListViewのSelectedIndexがずれる
□投稿者/ hs (248回)-(2011/05/30(Mon) 10:05:46)
No59506 (natsu さん) に返信

VBの話でした...
失礼しましたm(__)m
引用返信 編集キー/
■59519 / inTopicNo.4)  Re[3]: ListViewのSelectedIndexがずれる
□投稿者/ マサヤ (328回)-(2011/05/30(Mon) 10:53:55)
選択行のキー値をイベント実行時にhiddenで保存しておいて、
ポストバック時に、hiddenから値を取り出して、設定してあげればいいのではないでしょうか?


引用返信 編集キー/
■59529 / inTopicNo.5)  Re[4]: ListViewのSelectedIndexがずれる
□投稿者/ natsu (2回)-(2011/05/30(Mon) 19:08:12)
No59519 (マサヤ さん) に返信
> 選択行のキー値をイベント実行時にhiddenで保存しておいて、
> ポストバック時に、hiddenから値を取り出して、設定してあげればいいのではないでしょうか?
>
>

hs様、マサヤ様ご回答ありがとうございます。

方法論はご回答いただいた通りかと思うのですが、実際にやろうとすると二つの問題に突き当たりました。
@キー情報が取得できない。
以下のようにListViewのItemsでループしますと確かにListViewの項目数分ループしますが、
肝心のキー情報が入っていると思われる、lv.DataItemにはnullが入っており、保存しておいた
キー情報と照合できません。
foreach (ListViewItem lv in lstKensaku.Items)
{
 string keyValue;
 keyValue = lv.DataItem;
}

Apageをまたがる場合に対応できない。
ListViewにDataPagerを使用しています(以下のように)。
 <asp:DataPager ID="DataPager1" runat="server" PageSize="15">
このためページを跨ったデータ更新を行った場合に
保存しておいたキー情報は元のListViewに表示されていた
ページには存在しなくなっており、必然的にループ内でヒットしません。

@については照合するループ文の書き方をご教授いただけたらと思います。
Aについては、対応策が全く分かりませんので、何か対応方法があればご教授いただけたらと思います。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -