我想将单个DataTable拆分为多个DataTable
。
Table1包含clientid,clientname
(1,客户端1)(1,客户端2)(1,client3)(2,client4)(2,客户机程序)
我想将此表拆分为
table2 =(1,client1)(1,client2)(1,client3)
和
table3将有(2,client4)(2,client5)。
相同的clientid DataRow
将移至单独的DataTable
。我怎么能这样做?
我试过了,但它没有用。我想在c#中没有linq的情况下这样做。如何在不使用c#中的linq的情况下使用特定id将数据表拆分为多个数据表?
foreach (DataRow row in dsBindSubCategory.Tables[0].Rows)
{
DataRow newRow = newDt.NewRow();
newRow.ItemArray = row.ItemArray;
newDt.Rows.Add(newRow);
i++;
if (Convert.ToInt32(dsBindSubCategory.Tables[0].Rows[i]["ClientId"]) != Convert.ToInt32(dsBindSubCategory.Tables[0].Rows[i - 1]["ClientId"]))
{
newDs.Tables.Add(newDt);
j++;
newDt = dsBindSubCategory.Tables[0].Clone();
newDt.TableName = "Table_" + j;
newDt.Clear();
i = 0;
}
}
return newDs;
答案 0 :(得分:0)
以下代码将从一个数据表创建两个数据表。请注意,我也在代码中创建原始表,因为我无法访问您的数据源。
DataTable table = new DataTable();
DataColumn col1 = new DataColumn("clientid");
DataColumn col2 = new DataColumn("clientname");
col1.DataType = System.Type.GetType("System.Int32");
col2.DataType = System.Type.GetType("System.String");
table.Columns.Add(col1);
table.Columns.Add(col2);
DataRow r = table.NewRow();
r[col1] = 1;
r[col2] = "client 1";
table.Rows.Add(r);
r = table.NewRow();
r[col1] = 1;
r[col2] = "client 2";
table.Rows.Add(r);
r = table.NewRow();
r[col1] = 2;
r[col2] = "client 3";
table.Rows.Add(r);
// Create two new data tables
DataTable dt1 = new DataTable("t1");
DataTable dt2 = new DataTable("t2");
// Make the columns of the new tables match the existing table columns
foreach(DataColumn dc in table.Columns)
{
dt1.Columns.Add(new DataColumn(dc.ColumnName, dc.DataType));
dt2.Columns.Add(new DataColumn(dc.ColumnName, dc.DataType));
}
foreach (DataRow row in table.Rows)
{
int id = Convert.ToInt32(row["clientid"]);
if (id == 1)
{
DataRow dr = dt1.NewRow();
dr.SetField("clientid", row["clientid"]);
dr.SetField("clientname", row["clientname"]);
dt1.Rows.Add(dr);
}
else
{
DataRow dr = dt2.NewRow();
dr.SetField("clientid", row["clientid"]);
dr.SetField("clientname", row["clientname"]);
dt2.Rows.Add(dr);
}
}
}
所以,显然这只创建了两个表。由于您的评论表明您希望每个唯一ID有多个新数据表,因此您需要使用以下代码:
DataTable newTable= new DataTable();
// Make the columns of the new tables match the existing table columns
foreach(DataColumn dc in table.Columns)
{
newTable.Columns.Add(new DataColumn(dc.ColumnName, dc.DataType));
newTable.Columns.Add(new DataColumn(dc.ColumnName, dc.DataType));
}
每次遍历源表中的行并找到新的clientid。你可能想要某种id和一个新的结果表字典来跟踪事物。如果您需要更多细节,我可以尝试编写一个更完整的示例,但概念是相同的。
答案 1 :(得分:0)
您可以创建DataView并将它们复制到dataTables:
DataView DataView1 = new DataView(table,"ClientId=1","ClientId ASC", DataViewRowState.CurrentRows);
DataTable dt1 = DataView1.Table.Clone();