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.
«gennaio»
domlunmarmergiovensab
2627282930311
2345678
9101112131415
16171819202122
23242526272829
303112345