AII1968 Ответов: 2

Как добавить новые столбцы в новую таблицу?


<pre>Good afternoon! Help, I can not find a solution. I will describe the problem:
 The application reads the data and the dt table from the Excel file.
 Next, I need to pull out the data with the columns I need, for this I'm from the dt table, get the columns I need,

 Например 0:

DataTable dt = новый DataTable ();

  var firstArray = dt.строки.Бросание &ЛТ;строкаданных и GT; (). Выберите (х => У Х.ItemArray [0]);
  ВАР firstArray2 = ДТ.Строк.Бросание &ЛТ;строкаданных и GT; (). Выберите (х => У Х.ItemArray [2]);
  ВАР firstArray5 = ДТ.Строк.Бросание &ЛТ;строкаданных и GT; (). Выберите (х => У Х.ItemArray [5]);
  ВАР firstArray9 = ДТ.Строк.Бросание &ЛТ;строкаданных и GT; (). Выберите (х => У Х.ItemArray [9]);

  Затем создайте новую таблицу
   DataTable dt2 = новый DataTable ();
            DataColumn idColumn = новый столбец данных ("Id", тип.Метод Gettype (Системы".Типа int32"));

            DataColumn nameColumn = новый столбец данных ("имя", тип.GetType ("Система.Строка")));
            
            dt2.столбцы.Добавить (idColumn);
            dt2.столбцы.Добавить (nameColumn);

            Строкаданных подряд = ст2.Невров ();

Вопрос. Как добавить новые столбцы в новую таблицу?
Thank you in advance for your cooperation 


Что я уже пробовал:

I tried to find a solution on the Internet, but unfortunately I did not find anything.

Richard MacCutchan

Ваш код уже добавляет столбцы, в чем проблема?

2 Ответов

Рейтинг:
7

AII1968

var firstArray = dt.Rows.Cast<DataRow>().Select(x => x.ItemArray[0]).ToArray();
            var firstArray2 = dt.Rows.Cast<DataRow>().Select(x => x.ItemArray[2]).ToArray();
            var firstArray5 = dt.Rows.Cast<DataRow>().Select(x => x.ItemArray[5]).ToArray();
            var firstArray9 = dt.Rows.Cast<DataRow>().Select(x => x.ItemArray[9]).ToArray();


DataTable dt2 = new DataTable();
            DataColumn idColumn = new DataColumn("Id", Type.GetType("System.Int32"));
            idColumn.Unique = true; 
            idColumn.AllowDBNull = false; 
            idColumn.AutoIncrement = true; 
            idColumn.AutoIncrementSeed = 1; 
            idColumn.AutoIncrementStep = 1; 

            DataColumn nameColumn = new DataColumn("Name", Type.GetType("System.String"));

           
            dt2.Columns.Add(idColumn);
            dt2.Columns.Add(nameColumn);

                                              

            for (int i = 0; i < firstArray.Length; i++)
            {
                DataRow row = dt2.NewRow();                
                row.ItemArray = new object[] { i, firstArray[i]};
                dt2.Rows.Add(row);
            }


Рейтинг:
2

Richard Deeming

Попробуйте что-нибудь вроде этого:

DataColumn[] columnsToCopy =
{
    dt.Columns[0],
    dt.Columns[2],
    dt.Columns[5],
    dt.Columns[9],
};

DataTable dt2 = new DataTable();

dt2.BeginInit();
foreach (DataColumn col in columnsToCopy)
{
    dt2.Columns.Add(col.ColumnName, col.DataType);
}
dt2.EndInit();

dt2.BeginLoadData();
foreach (DataRow row in dt.Rows)
{
    object[] values = columnsToCopy.Select(col => row[col]).ToArray();
    dt2.Rows.Add(values);
}
dt2.EndLoadData();