I have a grid that is binded to a dataset that is populated from a stored-procedure.
One of the columns of the dataset (InstrumentName) is not taken from the stored-procedure, but is empty.
I want to set the values on each row of this column, to something, depending on a value of another column (Id). I have a list of names and ids in memony, and I want to hardcode set the name from my list.
When I do that in the Initialized() method, I can see in the debugging that the values are set, but then they are not on the grid. Seems like the grid is repainted and my set values are lost..
I have this loop running in Initialized():
for (int i = 0; i < view.DataRowCount; i++)
{
object Uic = view.GetRowCellValue(i, view.Columns["Uic"]);
int UicInt = 0;
if ((Uic != null) && (int.TryParse(Uic.ToString(), out UicInt)))
view.SetRowCellValue(i, view.Columns["InstrumentName"], GetName(UicInt));
}
I have also tried to do it (without looping) at DataMonitorGridViewCustomColumnDisplayText() without success..
In the end, I need to be able to use the AutoFilterRow on the new values. Up to now, everything has been possible, but not the AutoFiltering…
I would recommend filling a collection from the stored procedure. You can then use that collection as the data source for the grid. Create a class with all appropriate properties including the InstrumentName which you will assign values to from your own in-memory collection.
Update
Based on commentary below – I believe you can use DataRow.RowChanged event to trigger when a row is added. Then grab the ‘Id’ you want, query your in-memory collection.
I would still go back to my original recommendation. Because DataTables are loosely typed, a strongly-typed class would be much more flexible and ensure data integrity. If your DataTable has the columns Foo (datatype: int), Bar (datatype: string), and Baz (datatype: string) then create a class that mimics that structure:
You can fill a collection –
IList<T>orIEnumerable<T>– quite easily with LINQ.