Il metodo ImportRow che ho "scoperto" ed
utilizzato per la prima volta questa sera è comodo, perchè permette di
aggiungere ad una DataTable un oggetto DataRow proveniente da un'altra
DataTable.
Ad esempio, possiamo convertire il codice seguente:
foreach (DataRow dr_source in this.Tabella.Rows)
{
DataRow dr_dest = ds.Tables[0].NewRow();
dr_dest["name"] = dr_source["Name"];
dr_dest["birthday"] = dr_source["BirthDate"];
ds.Tables[0].Rows.Add(dr_dest);
}
con il seguente codice, più compatto e pulito:
foreach (DataRow dr_source in this.Tabella.Rows)
ds.Tables[0].ImportRow(dr_source);
La compattezza del codice ovviamente aumenta anche in base al numero di
DataColumn che compongono la DataTable. Se
invece dei due semplici campi 'name' e 'birthday' avessimo 50 campi, il guadagno
in termini di lunghezza di codice si fa man mano sempre maggiore.
Qualche annotazione: questa pagina di MSDN spiega nel dettaglio questo
metodo. Importare con ImportRow, ricordiamocelo, mantiene la
property RowState originaria (se importo una DataRow che nella
DataTable origine aveva RowState = Modified, questo stesso valore me lo ritrovo
nella DataTable destinazione). Quindi, è molto diverso dal chiamare il metodo
NewRow, perchè quest'ultimo crea un "record", imposta
RowState su DataRowState.Added, popolando i
fields con i valori di default.
Inoltre, cosa importante che mi ha fatto perdere 20
minuti: se la DataRow origjne e la
DataRow destinazione hanno struttura diversa (nomi di campi,
per esempio), la chiamata a ImportRow non dice assolutamente
nulla. Non viene sollevata un'eccezione, nessun errore. Semplicemente, le
DataColumn che corrispondono vengono importate, le altre no (valore null???).
powered by IMHO 1.2