Simple way to convert datarow array to datatable

C#ArraysDatatableDatarow

C# Problem Overview


I want to convert a DataRow array into DataTable ... What is the simplest way to do this?

C# Solutions


Solution 1 - C#

For .Net Framework 3.5+

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

But if there is no rows in the array, it can cause the errors such as The source contains no DataRows. Therefore, if you decide to use this method CopyToDataTable(), you should check the array to know it has datarows or not.

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

Reference available at MSDN: DataTableExtensions.CopyToDataTable Method (IEnumerable)

Solution 2 - C#

Why not iterate through your DataRow array and add (using DataRow.ImportRow, if necessary, to get a copy of the DataRow), something like:

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

Make sure your dataTable has the same schema as the DataRows in your DataRow array.

Solution 3 - C#

DataTable dt = new DataTable(); 

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

dt.Rows.Add(dr);

Solution 4 - C#

Another way is to use a 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");

Solution 5 - C#

Simple way is:

// 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());

Solution 6 - C#

DataTable Assetdaterow =
	(
		from s in dtResourceTable.AsEnumerable()
		where s.Field<DateTime>("Date") == Convert.ToDateTime(AssetDate)
		select s
	).CopyToDataTable();

Solution 7 - C#

DataTable dt = myDataRowCollection.CopyToDataTable<DataRow>();

Solution 8 - C#

DataTable dt = new DataTable();
foreach (DataRow dr in drResults)
{ 
    dt.ImportRow(dr);
}   

Solution 9 - C#

.Net 3.5+ added DataTableExtensions, use DataTableExtensions.CopyToDataTable Method

For datarow array just use .CopyToDataTable() and it will return datatable.

For single datarow use

new DataRow[] { myDataRow }.CopyToDataTable()

Solution 10 - C#

You could use System.Linq like this:

if (dataRows != null && dataRows.Length > 0)
{
   dataTable = dataRows.AsEnumerable().CopyToDataTable();
}

Solution 11 - C#

Here is the solution. It should work fine.

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);
} 

Solution 12 - C#

Incase anyone needs it in VB.NET:

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

Solution 13 - C#

You need to clone the structure of Data table first then import rows using for loop

DataTable dataTable =dtExisting.Clone();
foreach (DataRow row in rowArray) {
   dataTable.ImportRow(row);
}

Solution 14 - C#

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);
}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionDeveloper404View Question on Stackoverflow
Solution 1 - C#joeView Answer on Stackoverflow
Solution 2 - C#Jay RiggsView Answer on Stackoverflow
Solution 3 - C#Mitch WheatView Answer on Stackoverflow
Solution 4 - C#ilansView Answer on Stackoverflow
Solution 5 - C#ZolfaghariView Answer on Stackoverflow
Solution 6 - C#Rajenthiran TView Answer on Stackoverflow
Solution 7 - C#MiriamView Answer on Stackoverflow
Solution 8 - C#user1036202View Answer on Stackoverflow
Solution 9 - C#Haseeb MukhtarView Answer on Stackoverflow
Solution 10 - C#AndrésView Answer on Stackoverflow
Solution 11 - C#zaib shahView Answer on Stackoverflow
Solution 12 - C#logixologistView Answer on Stackoverflow
Solution 13 - C#Awais ShabirView Answer on Stackoverflow
Solution 14 - C#AVINASH DUBEYView Answer on Stackoverflow