【发布时间】:2015-12-08 05:24:41
【问题描述】:
我正在尝试将行从一个DataTable 转移到许多其他动态生成的DataTables。父 DataTable 包含以下格式的数据:
ID Name Type
--------------
1 ABC 0
1 PQR 2
2 XYZ 8
2 QWE 7
3 IOP 6
我希望具有相同ID 的行必须在一个表中。例如,上述场景将生成 3 个表。一个包含带有ID = 1 的行,第二个包含带有ID = 2 的行,第三个包含带有ID = 3 的行。我正在尝试使用以下代码来实现这一点:
DataSet ResultantDataSet = new DataSet();
DataView dv = InputDataSet.Tables[0].DefaultView;
dv.Sort = "ID";
int newID = -1;
DataTable dt = null;
foreach(DataRow dr in dv.ToTable().Rows) {
if (newID != int.Parse(dr["ID"].ToString())) {
newID = int.Parse(dr["ID"].ToString());
if (dt != null) ResultantDataSet.Tables.Add(dt);
dt = new DataTable();
} else {
dt.ImportRow(dr);
}
}
但问题在于ResultantDataSet 包含具有空行且具有单个未命名列的表。出了什么问题?
【问题讨论】:
-
不要吹毛求疵之类的,但你为什么要这样做?这听起来像是一种可怕的非规范化形式。
-
@Zane 实际上我有一个接受
DataSets 并以特定格式显示它们的用户控件。要将其转换为该格式,我需要这样做。 -
好吧,那么你最好的选择听起来像是将唯一 ID 插入到 #Table 中,然后循环遍历每个值,并使用动态 SQL 语句将每个值插入到表中。抱歉,我不确定我是否有时间为您写一个代码示例来说明如何完成此操作。
-
您是否尝试在 dt = new DataTable() 调用之后立即将列 ID、名称和类型显式添加到新的 dt 对象?也许 ImportRow 不会自动创建列,如果没有现有列,它就无法将原始行中的值复制到新表的新行中。
标签: c# .net sql-server datatable dataset