2016-10-13 7 views
1

文字列を含む配列のセットを持っています。 [# '、'# '、'# '、'# '、'# '、' @ '、'# '、} {'# '、'# '} '、'# '、}}
グリッドを動的に変更することができるようにグリッドを作成できるようにするには(グリッドは常に内部配列ごとに同じ量の文字が割り当てられます) 私は内部の配列は、行とそれぞれに内部の文字で、それは次のようになりますので、自分の列になりたいピクチャボックスのグリッドを動的に作成する

「#。#」
「#$#」
「#する@#」
」 ### "

どのようなシンボルが特定の画像になるかに応じて、このグリッドをセットアップするための最良の方法は何でしょうか、次に私は何をしたいのですか?

はこれだけDataGridViewを使用して、これを行うための最善の方法は、任意のヘルプ/アドバイスはあまり

+1

は、最も簡単なオプションです。 。 –

+0

[2次元配列に基づいてWPFグリッドを生成する方法]の可能な複製(http://stackoverflow.com/questions/276808/how-to-populate-a-wpf-grid-based-on-a- 2次元配列) – rmbq

答えて

1

を高く評価していることになるかと思っすることは、最も簡単なオプションです。例:

var images = new Dictionary<char, Image>() 
{ 
    {'#', Properties.Resources.Image1}, 
    {'.', Properties.Resources.Image2}, 
    {'$', Properties.Resources.Image3}, 
    {'@', Properties.Resources.Image4}, 
}; 
var data = new List<string>() { "#.#", "#$#", "#@#", "###" }; 
var list = data.Select(x => new 
         { 
          A = images[x[0]], 
          B = images[x[1]], 
          C = images[x[2]] 
         }).ToList(); 
this.dataGridView1.DataSource = list; 

上記のコードでは、文字と画像のマッピング用の辞書を作成しました。次に、文字の代わりにその画像を含むリストに入力データを整形します。結果リストをDataSourceとしてDataGridViewに設定すると、文字の代わりにそれらのイメージが表示されます。


匿名オブジェクトを使用したくない何らかの理由で、あなたは、単に任意の数の列を持つダイナミックDataTableを作成することができた場合: `DataGridView`を使用して

var images = new Dictionary<char, Image>() 
{ 
    {'#', Properties.Resources.Image1}, 
    {'.', Properties.Resources.Image2}, 
    {'$', Properties.Resources.Image3}, 
    {'@', Properties.Resources.Image4}, 
}; 
char[][] data = new char[][]{ 
    new char[] {'#','.','#'}, 
    new char[] {'#','$','#'}, 
    new char[] {'#','@','#'}, 
    new char[] {'#','#','#'}, 
}; 
var dt = new DataTable(); 
for (int i = 0; i < data.Max(x => x.Count()); i++) 
    dt.Columns.Add(string.Format("C{0}", i), typeof(Image)); 
data.ToList().ForEach(a => dt.Rows.Add(a.Select(x=>images[x]).ToArray())); 
this.dataGridView1.DataSource = dt; 
+0

これは本当にうまくいきました。私はちょっとした調整をしなければならなかったのですが、唯一の問題がありましたが、赤い "X"それは2行目から最終行まで1行に数えて行を作成しているため、セルに入れるものは何もありませんが、明日はそれを理解できません。 – 1seanr

+1

You'r welcome。 'this.dataGridView1.AllowUserToAddRows = false; 'を設定します。 –