Ris
Ris

Reputation: 1164

How to arrange datatable using C#

I am building datatable dynamically and the format is like following,

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";

How can I arrange is it like following,

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";

Upvotes: 0

Views: 187

Answers (3)

Alex
Alex

Reputation: 8937

You can make linq cross join and filter it to list (you can bind list to your 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();

Upvotes: 1

Steve
Steve

Reputation: 216243

Supposing that dr is a variable of type DataRow obtained calling the DataTable method NewRow, then you can add the values to the row ItemArray property in just one line.
Of course you need to be absolutely sure of your columns order and type

    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);

Upvotes: 1

Kinexus
Kinexus

Reputation: 12904

You could use code similar to this;

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";

Upvotes: 1

Related Questions