1

我正在从 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 的回答,因为它毕竟是更少的代码。

4

1 回答 1

2

代替

foreach (DataRow row in tblDataTable.Rows)
{                   
  tblCloned.ImportRow(row);
}

尝试

foreach (DataRow row in tblDataTable.Rows)
{                   
  tblCloned.LoadDataRow(row.ItemArray, true);
}
于 2012-06-26T16:43:30.187 回答