2011-01-07 17 views
2

辞書を自動的にGridviewにバインドできますか?私が持っている最も近いです:辞書をグリッドビューにバインドするにはどうすればいいですか?

Dictionary<string, myObject> MyDictionary = new Dictionary<string, myObject>(); 
// Populate MyDictionary here. 
Grid1.DataSource = MyDictionary.Values; 
Grid1.DataBind(); 

これは、GridViewのにmyObjectというのプロパティを結合するが、私は同様にキーを取得したいのですが。可能でない場合は、代替手段がありますか?リピータを使用しますか?ありがとう。

+0

ListViewのようにGridViewではなく、私が慣れていないDataGridViewについてお話ししていますか?もしそうなら、私の答えは当てはまりません。 –

+0

当分、私はちょうど2つのasp.netグリッドビューを並べて、1つはMyDictionary.Keysと他のMyDictionary.Valuesにバインドしました。 –

答えて

2

"Key"と "Value"にカラムをバインドする必要があります。

3

あなたは使用することができます。

var data = MyDictionary.Select(x => new List<object>{x.Key, x.Value}); 

これはあなたにIEnumerableは「行」を表し、各行内List<object>が表すIEnumerable<List<object>>、与える「列を。」

myObjectがコレクションタイプの場合、これは若干異なります。私はあなたのコードから確信することはできませんが、このようには見えません。

+0

.GetEnumerator()も同じですか? –

+0

@Ing列挙型はKeyValuePair 型のオブジェクトです。 – Jay

+0

残念ながら、残念ながら私たちはまだ.NET 2.0上にいるので、私のケースではうまくいかないと思います。 myObjectはコレクション型ではありません。 –

1

辞書がitemsSourceとしてどのくらいうまく機能しているかわかりません。 DictionaryがIEnumerableまたはICollectionを実装していない場合は、まったくないと思います。

ただし、Key文字列プロパティとオブジェクトを保持し、そのようなアイテムのコレクションを持つ独自のオブジェクトを作成することはできます。しかし、それは辞書が持っている多くのものが欠けています(ユニークなキーなどのように)。

おそらく、辞書をソースとして辞書を入れたときに、それはあなたにエラーを与えていToListメソッド()メソッド

を持っています。おそらく、値とキーとして列にDisplayMemberPathを設定する必要があります。 MSDN

当たり
+1

辞書は 'IEnumerable'と' ICollection 'と' IEnumerable > 'を実装しています。 http://msdn.microsoft.com/en-us/library/s4ys34ea.aspx – Greg

+0

他のコレクションと同様にListViewのitemsSourceとして使用できない理由がわかりません。 –

1

、データソースは、次のいずれかのインタフェースを実装するオブジェクトでなければならない:

  • 一次元アレイを含むIListインターフェイスを、。
  • DataTableクラスやDataSetクラスなどのIListSourceインターフェイス。
  • IBindingListインターフェイス(BindingListクラスなど)。
  • IBindingListViewインターフェイス(BindingSourceクラスなど)。

ディクショナリはこれらのインターフェイスを実装していません。あなたが得ることができる最も近いのはList<KeyValuePair<string, myObject>>です。

+1

これは、WinFormsのDataGridViewコントロール用であり、ASP.NET GridViewコントロール用ではありません。 – jwiscarson

2

私は最善の方法は、リストに変換することだと思います>

List<KeyValuePair<string, object>> list = new List<KeyValuePair<string, object>>(); 
list.AddRange(dictionary); 
Grid1.DataSource = list; 

これも簡単にソートを行うことができます:

list.Sort(delegate...); 

その後、データソースとしてそれを渡します。

関連する問題