【问题标题】:Rename column and type in Datatable after data is loaded加载数据后重命名列并在数据表中键入
【发布时间】:2012-06-26 15:30:29
【问题描述】:

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

【问题讨论】:

    标签: c# datatable asp.net-4.0


    【解决方案1】:

    代替

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

    试试

    foreach (DataRow row in tblDataTable.Rows)
    {                   
      tblCloned.LoadDataRow(row.ItemArray, true);
    }
    

    【讨论】:

      猜你喜欢
      • 2021-01-17
      • 1970-01-01
      • 2012-06-21
      • 1970-01-01
      • 1970-01-01
      • 2019-08-19
      • 1970-01-01
      • 1970-01-01
      • 2017-12-28
      相关资源
      最近更新 更多