2012-06-26 4 views
1

Я импортировать данные из CSV-файла, иногда есть столбец заголовков и несколько раз не клиент выбирает пользовательские столбцы (от нескольких падений падения)Переименовать столбец и введите Datatable после загрузки данных

моей проблема заключается в том я способный изменять тип и имя столбца, но когда я хочу импортировать строку данных в клонированную таблицу, она просто добавляет строки, но не содержит данных в этих строках. Если я переименую столбец в старые значения, он будет работать, скажем, имя столбца 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 (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); 
      } 

, но я принимаю ответ Скотти, потому что это меньше кода в конце концов.

ответ

2

Вместо

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

попробовать

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

удивительным работать как задумано. Благодарю. – Developer

Смежные вопросы