0

私はデータテーブルを動的に構築していますが、フォーマットは次のようになります。

DataTable dt = new DataTable();
DataColumn dc;

dc = new DataColumn();
dc.ColumnName = "Question";
dt.Columns.Add(dc);

dc = new DataColumn();
dc.ColumnName = "User1";
dt.Columns.Add(dc);

dc = new DataColumn();
dc.ColumnName = "User2";
dt.Columns.Add(dc);

dr["Question"] = "2D";
dr["User1"] = "1";
dr["Question"] = "3D";
dr["User1"] = "4";
dr["Question"] = "2D";
dr["User2"] = "2";
dr["Question"] = "3D";
dr["User2"] = "5";

次のように配置するにはどうすればよいですか、

DataTable dt = new DataTable();
DataColumn dc;

dc = new DataColumn();
dc.ColumnName = "Question";
dt.Columns.Add(dc);

dc = new DataColumn();
dc.ColumnName = "User1";
dt.Columns.Add(dc);

dc = new DataColumn();
dc.ColumnName = "User2";
dt.Columns.Add(dc);

dr["Question"] = "2D";
dr["User1"] = "1";
dr["User2"] = "2";
dr["Question"] = "3D";
dr["User1"] = "4";
dr["User2"] = "5";
4

3 に答える 3

1

dr が DataTable メソッド NewRow を呼び出して取得された DataRow 型の変数であると仮定すると、行のItemArrayプロパティに値を 1 行で追加できます。
もちろん、列の順序とタイプを完全に確認する必要があります

    DataRow dr = dt.NewRow();
    dr.ItemArray = new object[] {"Q1", "1", "2"};
    dt.Rows.Add(dr);

    dr = dt.NewRow();
    dr.ItemArray = new object[] {"Q2", "3", "4"};
    dt.Rows.Add(dr);
于 2013-03-28T10:40:03.600 に答える
1

次のようなコードを使用できます。

DataRow dr = dt.NewRow();
dr["Question"] = "2D";
dr["User1"] = "1";
dr["User2"] = "2";

dr = dt.NewRow();
dr["Question"] = "3D";
dr["User1"] = "4";
dr["User2"] = "5";
于 2013-03-28T10:36:18.933 に答える
1

linq クロス結合を作成し、リストにフィルター処理できます (リストを msChart にバインドできます)。

var result = (from dr1 in dt.Select()
                  join dr2 in dt.Select() on dr1["Question"].ToString() equals dr2["Question"].ToString()
                  select new { q = dr1["question"], u1 = dr1["User1"], u2 = dr2["User2"] }
                 ).Where(row => row.u1.ToString().Length > 0 && row.u2.ToString().Length > 0).ToList();
于 2013-03-28T11:19:50.697 に答える