2010-01-23 2 views

ответ

70

Почему не итерацию через массив DataRow и добавьте (используя DataRow.ImportRow, если это необходимо, чтобы получить копию DataRow), что-то вроде:

foreach (DataRow row in rowArray) { 
    dataTable.ImportRow(row); 
} 

Убедитесь, что ваш DataTable имеет той же схемы, что и DataRows в вашем массиве DataRow.

+0

Этот метод полезен, если вы получаете сообщение об ошибке «Недействительный источник данных используется для MyControl. Допустимый источник данных должен реализовывать IListSource или IEnumerable» при попытке привязать DataRow непосредственно к свойству DataSource элемента управления. Вот как это сделать: DataTable dataTable = new DataTable(); dataTable.ImportRow (DataRow); MyControl.DataSource = dataTable; ' – humbads

+0

+1 Я предпочитаю это, а не' rowArray.CopyToDataTable(); 'потому что он хранит схему таблицы и не заменяет ее новым объектом таблицы! –

+1

Очень хорошо! Но я бы предложил клонировать DataTable перед foreach. Он копирует формат DataTable: newDataTable = oldDataTable.clone(); – Whiplash

10
DataTable dt = new DataTable(); 

DataRow[] dr = (DataTable)dsData.Tables[0].Select("Some Criteria"); 

dt.Rows.Add(dr); 
+2

Я уже пытался, как это .. ошибка возникает что-то вроде «Входной массив длиннее количество столбцов в этой таблице. " – Nila

+0

AS Jay указал, что ваш dataTable имеет ту же схему, что и DataRows в вашем массиве DataRow. –

+1

Да .. Я пробовал. Я использовал Datatable1 = datatable2.Clone(); Теперь он работает ... Спасибо :-) – Nila

163

Для .Net Framework 3.5+

DataTable dt = new DataTable(); 
DataRow[] dr = dt.Select("Your string"); 
DataTable dt1 = dr.CopyToDataTable(); 

Но если нет ни одной строки в массиве, это может вызвать ошибки, такие как источник не содержит DataRows. Поэтому, если вы решите использовать этот метод CopyToDataTable(), вы должны проверить массив, чтобы знать, что у него есть datarows или нет.

if (dr.Length > 0) 
    DataTable dt1 = dr.CopyToDataTable(); 

Ссылка доступна на MSDN: DataTableExtensions.CopyToDataTable Method (IEnumerable)

+0

Мне это нравится. –

+1

Откуда вы получили 'copyToDataTable()'? Я не нашел его в .net 2.0 – SMUsamaShah

+1

.Net Framework 3.5+ –

2

Вот решение. Он должен работать нормально.

DataTable dt = new DataTable(); 
dt = dsData.Tables[0].Clone(); 
DataRows[] drResults = dsData.Tables[0].Select("ColName = 'criteria'); 

foreach(DataRow dr in drResults) 
{ 
    object[] row = dr.ItemArray; 
    dt.Rows.Add(row); 
} 
9

Другой способ заключается в использовании DataView

// Create a DataTable 
DataTable table = new DataTable() 
... 

// Filter and Sort expressions 
string expression = "[Birth Year] >= 1983"; 
string sortOrder = "[Birth Year] ASC"; 

// Create a DataView using the table as its source and the filter and sort expressions 
DataView dv = new DataView(table, expression, sortOrder, DataViewRowState.CurrentRows); 

// Convert the DataView to a DataTable 
DataTable new_table = dv.ToTable("NewTableName"); 
3
DataTable dt = myDataRowCollection.CopyToDataTable<DataRow>(); 
3
DataTable dt = new DataTable(); 
foreach (DataRow dr in drResults) 
{ 
    dt.ImportRow(dr); 
} 
5

Простой способ:

// dtData is DataTable that contain data 
DataTable dt = dtData.Select("Condition=1").CopyToDataTable(); 

// or existing typed DataTable dt 
dt.Merge(dtData.Select("Condition=1").CopyToDataTable()); 
1

Incase кто нуждается в ней в VB.NET:

Dim dataRow as DataRow 
Dim yourNewDataTable as new datatable 
For Each dataRow In yourArray 
    yourNewDataTable.ImportRow(dataRow) 
Next 
1

.Net 3.5+ добавлен DataTableExtensions, использовать метод DataTableExtensions.CopyToDataTable

Для DataRow массива просто использовать .CopyToDataTable(), и он будет возвращать DataTable.

Для использования одного DataRow

new DataRow[] { myDataRow }.CopyToDataTable() 
0

Вы можете использовать System.Linq так:

if (dataRows != null && dataRows.Length > 0) 
{ 
    dataTable = dataRows.AsEnumerable().CopyToDataTable(); 
} 
0
DataTable dataTable = new DataTable(); 
dataTable = OldDataTable.Tables[0].Clone(); 
foreach(DataRow dr in RowData.Tables[0].Rows) 
{ 
DataRow AddNewRow = dataTable.AddNewRow(); 
AddNewRow.ItemArray = dr.ItemArray; 
dataTable.Rows.Add(AddNewRow); 
} 
+1

Пожалуйста добавьте некоторое объяснение предоставленного вам кода –

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