我正在从 csv 文件导入数据,有时有列标题,有时客户没有选择自定义列(从多个下拉列表中)
我的问题是我可以更改列的类型和名称,但是当我想将数据行导入克隆表时,它只会添加行,但这些行中没有数据。如果我将列重命名为它可以工作的旧值,假设第 0 列名称为 0,如果我将其更改为我需要的其他内容,它不会用数据填充下面的行,但如果我再次将零更改为零,它将任何主意:
这是我的编码:
#region Manipulate headers
DataTable tblCloned = new DataTable();
tblCloned = tblDataTable.Clone();
int i = 0;
foreach (string item in lstRecord)
{
if (item != "Date")
{
var m = tblDataTable.Columns[i].DataType;
tblCloned.Columns[i].DataType = typeof(System.String);
tblCloned.Columns[i].ColumnName = item;
}
else if(item == "Date")
{
//get the proper date format
//FillDateFormatToColumn(tblCloned);
tblCloned.Columns[i].DataType = typeof(DateTime);
tblCloned.Columns[i].ColumnName = item;
}
i++;
}
tblCloned.AcceptChanges();
foreach (DataRow row in tblDataTable.Rows)
{
tblCloned.ImportRow(row);
}
tblCloned.AcceptChanges();
#endregion
在第二个 foreach 循环中,当它调用将数据导入克隆表时,它会添加空行。
经过几次尝试,我想出了这个可行的解决方案:
foreach (DataRow row in tblDataTable.Rows)
{
int x = 0;
DataRow dr = tblCloned.NewRow();
foreach (DataColumn dt in tblCloned.Columns)
{
dr[x] = row[x];
x++;
}
tblCloned.Rows.Add(dr);
//tblCloned.ImportRow(row);
}
但我会接受 Scottie 的回答,因为它毕竟是更少的代码。