0

C# で配列を含む 32 個の文字列配列を宣言する必要があります。すべて書き出すと、次のように問題なく動作します。

string[] row1 = new string[] { "NO.", "DATA BIN", "BIT2", "BIT1", };
string[] row2 = new string[] { "1", DataBin[1], BitLabels[1, 1], BitLabels[0, 1], };
string[] row3 = new string[] { "2", DataBin[2], BitLabels[1, 2], BitLabels[0, 2], };
string[] row4 = new string[] { "3", DataBin[3], BitLabels[1, 3], BitLabels[0, 3], }; 

しかし、次のように作成できれば、はるかにクリーン/簡単になります。

string[] row1 = new string[] { "NO.", "DATA BIN", "BIT2", "BIT1", };
for (int i = 2; i < 33; i++)
{
string[] row(i) = new string[] { Convert.ToString(i), DataBin[i], BitLabels[1, i], BitLabels[0, i], };
}

問題は、インスタンス名 (row1 など) にインデックスを付けられないことです。

これは DataGridView 用であるため、次の処理を行う必要もあります。

object[] rows = new object[] { row1 , row2 , row3 , row4 , row5 , row6 , row7 , row8 , row9 ,
                               row10 , row11 , row12 , row13 , row14 , row15 , row16 , row17 ,
                               row18 , row19 , row20 , row21 , row22 , row23 , row24 , row25 ,
                               row26 , row27 , row28 , row29 , row30 , row31 , row32 , row33 };            
foreach (string[] rowArray in rows)
        {
            myDataGridView.Rows.Add(rowArray);
        }

助言がありますか?(わかりやすくするために多くの編集を申し訳ありません)

4

4 に答える 4

5

多次元 ( [,]) またはジャグ ( [][]) 配列を使用できます。

あなたの例に基づいて、私はギザギザ(配列の配列)に行きます:

string[][] rows = new string[32][];

for (int i = 0; i < rows.Length; i++)
{
    int n = i+1;  // you seem to use 1 as origin
    rows [i] = new string[] { n.ToString(), DataBin[n], ... };
}

編集:これはDataGridView用なので...

そのため、(列に対して) 配列を実際に使用することはできません。適切なクラスが必要になります。バインドするプロパティ名付き。行の配列も必要ありません(拘束するため)。

現在の場所から必要な場所に移動する簡単な方法は、匿名クラスを使用することです。

(ティムから作品を借りる)

var rows = Enumerable.Range(1, 32)
     .Select(i => new {   // this is the anon class
         Index = i.ToString(),   // on-the-fly property 'Index'
         Text1 = DataBin[i], 
         Text2 = BitLabels[2, i], 
         Text3 = BitLabels[1, i],  /* etc */ }
       );

そして、列をIndex、Text1、Text2などにバインドできます

于 2013-08-14T20:39:03.780 に答える
3

おそらく、Linq を使用したいでしょう:

string[][] rows = Enumerable.Range(1, 32)
    .Select(i => new [] { i.ToString(), DataBin[i], BitLabels[2, i], BitLabels[1, i], BitLabels[0, i], })
    .ToArray();
于 2013-08-14T20:43:33.617 に答える
2

List<string[]>サンプルに , を使用できます。

var rows = new List<string[]>();

for (int i = 0; i < 32; i++)
{
   rows.Add(new string[] { Convert.ToString(i), DataBin[i], BitLabels[2, i], BitLabels[1, i], BitLabels[0, i] });
}

その後、rowsオブジェクトを使用してアクセスできます

rows[0][3]

最初のインデックスはリストの項目で、2 番目のインデックスは配列のインデックスです。

ToArray()を呼び出しての配列を取得することもできますstring[]

于 2013-08-14T20:41:44.183 に答える
1

あなたはほとんどそれを手に入れたようです。配列の答えは良いものです。別の可能なアプローチは、リストを使用することです。必要に応じて、後でリストを配列に変換できます。ご覧のとおり、コードはクリーンで簡単に理解できます。

var rows = new List<string[]>();
for (int i = 0; i < 32; i++)
{
    var row = new string[] { Convert.ToString(i), DataBin[i], BitLabels[2, i], BitLabels[1, i], BitLabels[0, i], };
    rows.Add(row);
}

// use rows.ToArray() if you need it to be an array or arrays later.
于 2013-08-14T20:43:43.977 に答える