IDとオブジェクト型の両方をListViewに保持したい。私はこれをやろうとしています:ListViewにオブジェクト型を挿入する方法は?
lstView.Items.Insert(MyObject);
// can't do this, because it takes only Int and String
私の場合、IDはintなので、その部分は大丈夫です。しかし、オブジェクトタイプを挿入し、Item_Selection変更イベントでそれを取得する方法はありますか?この周り
IDとオブジェクト型の両方をListViewに保持したい。私はこれをやろうとしています:ListViewにオブジェクト型を挿入する方法は?
lstView.Items.Insert(MyObject);
// can't do this, because it takes only Int and String
私の場合、IDはintなので、その部分は大丈夫です。しかし、オブジェクトタイプを挿入し、Item_Selection変更イベントでそれを取得する方法はありますか?この周り
ListView
追加またはListBox
またはComboBox
のようなオブジェクトを直接挿入し、代わりにあなたはListViewItem
を作成する必要があり、そのTag
プロパティを設定することはできません。
MSDN
コントロールに関するデータを格納するオブジェクトからTagプロパティ。デフォルトはnullです。
Objectクラスから派生した任意の型をこの プロパティに割り当てることができます。 Windowsフォームの デザイナーでTagプロパティを設定すると、テキストのみを割り当てることができます。タグ プロパティの一般的な使用方法は、コントロールと密接に関連するデータを格納することです。 たとえば、 顧客に関する情報を表示するコントロールがある場合、顧客の注文 の履歴を含むデータセットをそのコントロールのタグプロパティに格納して、データにすぐにアクセスすることができます。
例コード:
MyObject myObj = new MyObject();
ListViewItem item = new ListViewItem();
item.Text = myObj.ToString(); // Or whatever display text you need
item.Tag = myObj;
// Setup other things like SubItems, Font, ...
listView.Items.Add(item);
あなたが戻っListView
から、あなたのオブジェクトを取得する必要があるとき、あなたはTag
プロパティをキャストすることができます。
private void OnListViewItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) {
MyObject myObj = (MyObject)e.Item.Tag;
int id = myObj.Id;
// Can access other MyObject Members
}
通常、ヘルパーメソッドに機能をラップする方が簡単です。
public static void CreateListViewItem(ListView listView, MyObject obj) {
ListViewItem item = new ListViewItem();
item.Tag = obj;
// Other requirements as needed
listView.Items.Add(item);
}
そして、あなたが行うことができます:
CreateListViewItem(listView, obj);
あなたがしたい場合は、データはあなたがもう少し何かを実装する必要がありますバインドするのでListView
は、コントロールの多くのようにDataSource
プロパティをサポートしていません。カスタム。
これはすばらしい答えです。スーパーヘルプ。 – Paperwaste
最も簡単な方法は、側にあなたのオブジェクトのリストを維持することです:
List<MyObject> list = ... ; // my list
IDとして文字列でリストから辞書を生成する、またはあなたから取得するために、インデックスを使用することができます元のリスト:辞書にリストビューを取り付ける
Dictionary<int,string> listBinder = new Dictionary<int,string>(
list.Select(i => new KeyValuePair<int,string>(i.ID, i.Name))
);
バインドまたは分離コード、そしてプライベートリストからオブジェクトを取得するために選択した項目を使用します。
新しいlistviewitemオブジェクトを作成します。タグプロパティを使用します。
できない場合は実行できません。おそらく、回避策があります。ここであなたの目標は何ですか? – McGarnagle
質問の先頭に「C#」などを付けないでください。それがタグのためのものです。 –