Posizione di un DataRow

In un blog di Andrea suggeriva questo workaround "Perchè quando ci vuole, ci vuole... Reflection :-)"  per catturare la posizione di una certa Datarow: con reflection andare a leggere la variabile privata "rowID". Il workaround funziona ma non sampre... o per lo meno ho avuto problemi quando nella datatable devo aggiungere e togliere elementi... la variabile non sembra cambiare valore :(

Il workaound che ho trovato in sostituzione fa smepre uso di reflection ma è in un certo senso più documentato del precedente. La DataRowCollection ha infatti la proprietà protetta List che contiene da disegno gli elementi della collezione. Ho ragione di pensare che tale collezione sia anche correttamente ordinata... per cui scritto questo nuovo wrapper per bypassare il problema:

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); }

Il workaround sembra funzionare! :-p

posted @ venerdì 9 luglio 2004 12:58

Print
Comments have been closed on this topic.
«aprile»
domlunmarmergiovensab
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011