2016-08-16 8 views
0

文字列をキーに、Listを値として含む辞書の値で埋められるDataGridを作成しています。キーは、列のヘッダであるべきであり、リストの内容は、その列の内容であった:そのためDataGridを上から下に塗りつぶします

header1(key)  header2(key)  header3(key) 
value1fromList value1fromList value1fromList 
value2fromList value2fromList value2fromList 
value3fromList      value3fromList 

、私のためにItemSourceとしてこの値を使用して充填されて使用されるデータテーブルを作成していDataGrid。私の問題は、私はこの方法でデータテーブルを埋める方法がわからないということです。私のソリューションは、DataTableをいくつかのギャップで埋めるだけで、既存の値を上書きします。

http://oi64.tinypic.com/20f45eh.jpg

public void FillDataGrid(Dictionary<string, List<string>> valuedict) 
     { 
      myGrid.Columns.Clear(); 
      var dt = new DataTable(); 
      DataRow row = null; 
      foreach(KeyValuePair<string, List<string>> entry in valuedict) 
      { 
       dt.Columns.Add(entry.Key); 
       foreach (string word in entry.Value) 
       { 
        row = dt.NewRow(); 
        row[entry.Key] = word; 
       } 
       dt.Rows.Add(row); 
      } 
      myGrid.ItemsSource = dt.AsDataView(); 
     } 
+0

コードの生成例を教えてください。あなたは私たちにあなたが望むものを見せてくれました。あなたは現在何を得ていますか? –

+0

スクリーンショットを追加 – Scorch

答えて

3

あなたの現在のコードは、表形式の構造に非表形式のデータを入れしようとしています。

すべての列を作成する前に、DataTableに行を追加しています。

foreachループの最初の反復では、正確に1つの列(header1)があります。次に、内側のforeachループの内側で、その時点で1つの列しか持たない行をDataTableに追加します。だからあなたの最初の反復の後、あなたのテーブルには、次のようになります。

header1  
value1fromList 
value2fromList 
value3fromList 

あなたの2回目の反復では2番目の列(HEADER2)を追加し、今2列を持っていることを、あなたのDataTableに行を追加している外側のforeachループを介して。

外側のforeachループを通して、あなたの2回目の繰り返しの終わりには、あなたのテーブルには、次のようになります。

header1   header2  
1) value1fromList 
2) value2fromList 
3) value3fromList 
4)     value1fromList2 
5)     value2fromList2  

そして、あなたがミックスにheader3を追加するとき、header3の値のデータは、行6を占有し、 7、および8

今、私はあなたがやろうとしているかを正確にわからないんだけど、あなたはこのようになりますグリッドを持ってしようとしているように聞こえる:

 header1(key)  header2(key)  header3(key) 
1) value1fromList value1fromList value1fromList 
2) value2fromList value2fromList value2fromList 
3) value3fromList      value3fromList    

一つの方法のwすべての列を最初にテーブルに追加してから、最大のリストを反復して、3つの列の値をすべて同時に行に追加します。

foreach(KeyValuePair<string, List<string>> entry in valuedict) 
{ 
    dt.Columns.Add(entry.Key); 
} 

そして、最大のリストの項目の数を繰り返し、同時に各列の値を加算します。

int i = 0; 
foreach (string word in MyLongestList.Value) 
{ 
    row = dt.NewRow(); 
    row[firstList.key] = firstList[i]; 
    row[secondList.key] = secondList[i]; 
    row[MyLongestList.key] = word; 
    dt.Rows.Add(row); 
    i++; 
} 

個人的には、プレゼンテーションの構造がデータを正確に反映しているとは思えません。非表データを表形式の構造に入れています。しかし、それはできます。

+0

ありがとう、あなたの答えは大きな助けです。私は今行がどのように満たされているのか理解している。 – Scorch

関連する問題