2012-05-07 2 views
7

IDとオブジェクト型の両方をListViewに保持したい。私はこれをやろうとしています:ListViewにオブジェクト型を挿入する方法は?

lstView.Items.Insert(MyObject); 
// can't do this, because it takes only Int and String 

私の場合、IDはintなので、その部分は大丈夫です。しかし、オブジェクトタイプを挿入し、Item_Selection変更イベントでそれを取得する方法はありますか?この周り

+0

できない場合は実行できません。おそらく、回避策があります。ここであなたの目標は何ですか? – McGarnagle

+0

質問の先頭に「C#」などを付けないでください。それがタグのためのものです。 –

答えて

22

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プロパティをサポートしていません。カスタム。

+0

これはすばらしい答えです。スーパーヘルプ。 – Paperwaste

0

最も簡単な方法は、側にあなたのオブジェクトのリストを維持することです:

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)) 
); 

バインドまたは分離コード、そしてプライベートリストからオブジェクトを取得するために選択した項目を使用します。

2

新しいlistviewitemオブジェクトを作成します。タグプロパティを使用します。

関連する問題