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.
«maggio»
domlunmarmergiovensab
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234