web-dev-qa-db-fra.com

Un moyen simple de convertir un tableau datarow en datatable

Je veux convertir un tableau DataRow en DataTable ... Quel est le moyen le plus simple de procéder?

87
Nila

Pourquoi ne pas parcourir votre tableau DataRow et ajouter (à l'aide de DataRow.ImportRow, si nécessaire, une copie du DataRow), par exemple:

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

Assurez-vous que votre dataTable a le même schéma que le DataRows dans votre tableau DataRow.

79
Jay Riggs

Pour .Net Framework 3.5+

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

Mais s'il n'y a pas de lignes dans le tableau, cela peut entraîner des erreurs telles que La source ne contient pas de DataRows. Par conséquent, si vous décidez d'utiliser cette méthode CopyToDataTable(), vous devez vérifier le tableau pour savoir s'il contient des datarows ou non. 

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

Référence disponible sur MSDN: DataTableExtensions.CopyToDataTable, méthode (IEnumerable)

175
joe

Une autre façon consiste à utiliser un 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");
10
ilans
DataTable dt = new DataTable(); 

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

dt.Rows.Add(dr);
10
Mitch Wheat

La manière simple est:

// 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());
7
Zolfaghari
DataTable dt = myDataRowCollection.CopyToDataTable<DataRow>();
3
Miriam
DataTable dt = new DataTable();
foreach (DataRow dr in drResults)
{ 
    dt.ImportRow(dr);
}   
3
user1036202

Voici la solution. Cela devrait bien fonctionner.

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);
} 
2
zaib shah

.Net 3.5+ ajouté DataTableExtensions, utilisez la méthode DataTableExtensions.CopyToDataTable 

Pour un tableau datarow, utilisez simplement .CopyToDataTable () et il renverra datatable.

Pour une utilisation unique de datarow 

new DataRow[] { myDataRow }.CopyToDataTable()
1
Haseeb Mukhtar

Incase quiconque en a besoin dans VB.NET:

Dim dataRow as DataRow
Dim yourNewDataTable as new datatable
For Each dataRow In yourArray
     yourNewDataTable.ImportRow(dataRow)
Next
1
logixologist
DataTable Assetdaterow =
    (
        from s in dtResourceTable.AsEnumerable()
        where s.Field<DateTime>("Date") == Convert.ToDateTime(AssetDate)
        select s
    ).CopyToDataTable();
1
Rajenthiran T

Vous devez d'abord cloner la structure de la table de données, puis importer des lignes à l'aide de la boucle for

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

Vous pouvez utiliser System.Linq comme ceci:

if (dataRows != null && dataRows.Length > 0)
{
   dataTable = dataRows.AsEnumerable().CopyToDataTable();
}
0
Andrés
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);
}
0
AVINASH DUBEY