C # moyen simple de copier ou cloner un DataRow?

Je cherche un moyen simple de faire un clone D'un DataRow. Un peu comme prendre un instantané de cette ligne et l'enregistrer. Les valeurs de la ligne d'origine sont alors libres de changer, mais nous avons toujours une autre copie enregistrée qui ne change pas. Est-ce la bonne façon de le faire?

    DataRow Source, Destination;
    //Assume we create some columns and fill them with values
    Destination.ItemArray = Source.ItemArray;

Cela va-t-il simplement définir la référence Itemarray de Snapshot pour pointer vers celle de la Source ou fait-il réellement une copie séparée? Dois-je faire à la place?

    Destination.ItemArray = Source.ItemArray.Clone();

EDIT: Je ne pense pas que le deuxième code extrait compile réellement.

94
demandé sur Paul Matthews 2012-08-19 11:39:29

2 réponses

Vous pouvez utiliser ImportRow méthode à copier une Ligne de DataTable à DataTable avec le même schéma:

var row = SourceTable.Rows[RowNum];
DestinationTable.ImportRow(row);

Mise à Jour:

Avec votre nouvelle Édition, je crois:

var desRow = dataTable.NewRow();
var sourceRow = dataTable.Rows[rowNum];
desRow.ItemArray = sourceRow.ItemArray.Clone() as object[];

Fonctionnera

151
répondu Cuong Le 2015-05-26 11:38:51

, Mais assurez-vous que votre ligne est accessible dans la nouvelle table, vous devez fermer la table:

DataTable Destination = new DataTable(Source.TableName);
Destination = Source.Clone();
DataRow sourceRow = Source.Rows[0];
Destination.ImportRow(sourceRow);
-1
répondu rdjabarov 2016-06-03 14:47:01