2010-01-23 5 views

Répondre

70

Pourquoi ne pas itérer votre tableau de DataRow et ajouter (en utilisant DataRow.ImportRow, si nécessaire, pour obtenir une copie du DataRow), quelque chose comme:

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

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

+0

Cette technique est utile si vous obtenez le message d'erreur "Une source de données valide est utilisée pour MyControl.Une source de données valide doit implémenter IListSource ou IEnumerable" lorsque vous essayez de lier un DataRow directement à la propriété DataSource d'un contrôle. Voici comment faire: 'DataTable dataTable = new DataTable(); dataTable.ImportRow (dataRow); MyControl.DataSource = dataTable; ' – humbads

+0

+1 Je préfère ceci plutôt que' rowArray.CopyToDataTable(); 'car cela conserve le schéma de la table et ne le remplace pas par un nouvel objet table! –

+1

Très bien! Mais je suggérerais de cloner le DataTable avant le foreach. Il copie le format de DataTable: newDataTable = oldDataTable.clone(); – Whiplash

10
DataTable dt = new DataTable(); 

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

dt.Rows.Add(dr); 
+2

J'ai déjà essayé comme ça .. Une erreur se produit quelque chose comme « tableau d'entrée est plus longue que le nombre de colonnes dans cette table. " – Nila

+0

AS Jay a souligné, Assurez-vous que votre dataTable a le même schéma que les DataRows dans votre tableau DataRow –

+1

Oui .. J'ai essayé. J'ai utilisé Datatable1 = datatable2.Clone(); Maintenant ça marche ... Merci :-) – Nila

163

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, il peut provoquer des erreurs telles que La source ne contient pas DataRows. Par conséquent, si vous décidez d'utiliser cette méthode CopyToDataTable(), vous devez vérifier le tableau pour savoir s'il a des données ou non.

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

Référence disponible sur MSDN: DataTableExtensions.CopyToDataTable Method (IEnumerable)

+0

J'aime celui-ci. –

+1

D'où avez-vous eu 'copyToDataTable()'? Je ne l'ai pas trouvé dans .net 2.0 – SMUsamaShah

+1

. Net Framework 3.5+ –

2

Voici la solution. Cela devrait fonctionner correctement.

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

Une autre façon est d'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"); 
3
DataTable dt = myDataRowCollection.CopyToDataTable<DataRow>(); 
3
DataTable dt = new DataTable(); 
foreach (DataRow dr in drResults) 
{ 
    dt.ImportRow(dr); 
} 
5

Une façon 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()); 
1

Incase quelqu'un a besoin dans VB.NET:

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

.Net 3.5+ ajouté DataTableExtensions, utilisez DataTableExtensions.CopyToDataTable Méthode

Pour datarow ensemble il suffit d'utiliser .CopyToDataTable() et il retournera datatable.

Pour une utilisation unique datarow

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

Vous pouvez utiliser System.Linq comme ceci:

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

Please ajouter quelques explications sur le code fourni –

Questions connexes