Nel lontano settebre 2004 postavo "Posizione di un DataRow" dove proponevao una mia versione di un metodo helper per individuare la posizione ordinale di una Datarow in una Datatable. Oggi mi hanno fatto notare che tale metodo nel fx 2.0 non funziona. Ammetto che mi sono pigramente fidato e non ne ho controllato il motivo... tuttavia ho indagato tra i meandri di MSDN per scoprire se il Framework 2.0 poteva offrire qualcosa di interessante per lo scopo.
DataRowCollection.IndexOf Method
Note: This method is new in the .NET Framework version 2.0.
http://msdn2.microsoft.com/en-us/library/system.data.datarowcollection.indexof(VS.80).aspx
Posso quindi modificare il metodo GetRowId come segue:
public static int GetRowId(DataRow row)
{
//FieldInfo rowFieldsInfo = typeof(DataRow).GetField("rowID", BindingFlags.NonPublic | BindingFlags.Instance);
//return (int) rowFieldsInfo.GetValue(row);
//PropertyInfo protectedListProp =
// typeof(DataRowCollection).GetProperty("List", BindingFlags.NonPublic | BindingFlags.Instance);
//IList rows = (IList) protectedListProp.GetValue(row.Table.Rows, null);
//return rows.IndexOf(row);
return row.Table.Rows.IndexOf(row);
}
La soluzione documentata è sempre la migliore e sono bene contento di poterla sostituire.
o0O(...ma M.rkino non fare il pigro, in fondo sei comunque più che curioso di sapere come mai la vecchia soluzione non funziona più...)
posted @ giovedì 22 febbraio 2007 23:46