- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ListView 削除ボタン押下時に値を取得したい)
ListViewで行のアイテムを取得する方法
このQ&Aのポイント
- ListViewで削除ボタン押下時に行のアイテムを取得する方法について教えてください。
- 更新ボタンはListViewのOnItemUpdatingイベントからLabelコントロールを取得していますが、削除ボタンでは同じ方法が使えないようです。
- 削除ボタンがItemTemplateとSelectedItemTemplateにしか置いていない場合、どのように行のアイテムを取得すれば良いのでしょうか。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
うーん、どういったら伝わるかなぁ。。。 むずかしいなぁ。 えっと、デザイン時というかプログラムで記述している状態と、実行されている時点でのオブジェクトの状態は異なることがあります。 ItemTemplateやSelectedItemTemplateは実行時は存在していないはずです。 実行時にはDataがバインディングされることによって普通の行に展開されています。 なので、実行時のListViewの内部の構成にあわせてFindControlを使う必要があります。 ただ、FindControl使って該当のコントロールとりだせたとしても、「どの行か?」というデータはわからないよーな。。。 ちょっと別のアプローチが必要な気がします。
お礼
下記で無事取ることができました。 お手数をおかけしました。 protected void ListView1_ItemDeleting(object sender,ListViewDeleteEventArgs e) { ListViewItem item =ListViewItem)ListView1.Items[e.ItemIndex]; Label idLabel = (Label)item.FindControl("idLabel"); }
補足
回答ありがとうございます。 >プログラムで記述している状態と、実行されている時点でのオブジェクトの状態は異なることがあります。 →こちらは理解しているつもりです >ItemTemplateやSelectedItemTemplateは実行時は存在していないはずです。 →削除ボタンですので、少なくとも行のレコードが存在しているので、 この状態でItemTemplateが存在していないということが理解できません。 EditItemTemplateであれば編集ボタンが押されていない状態で、 EditItemTemplateが存在しないことは理解できますが、 ItemTemplateも存在していないというのは本当でしょうか? 下記でチェックしてみるとItemTemplateは存在しているように見えます。 if (ListView1.ItemTemplate != null) { Debug.Print("ItemTemplate は ある"); } else { Debug.Print("ItemTemplate は ない"); }