[Mono-dev] DataGridItem.DataItem null after DataBind
Cullen Linn
Cullen at LinnLogistics.com
Fri Mar 9 09:39:53 EST 2007
In DataGrid in mono 1.2.3.1 I have noticed that directly after
invocation of DataBind() in a DataGrid, the individual DataGridItems all
provide a null DataItem object. For example, try the following code:
dataGrid.DataSource = someDataSource;
dataGrid.DataBind();
foreach( DataGridItem item in dataGrid.Items ) {
Console.WriteLine( "DataItem: " + (item.DataItem ==
null?"NULL":item.DataItem.GetType() ); //outputs DataItem: NULL on each
DataGridItem
}
If, however, one is handling one of the item events such as the
ItemCreated event, the DataItem is non null. For Example:
dataGrid.DataSource = someDataSource;
dataGrid.ItemDataBound += new DataGridItemEventHandler( handler );
dataGrid.DataBind();
foreach( DataGridItem item in dataGrid.Items ) {
Console.WriteLine( "DataItem: " + (item.DataItem == null?"NULL":"OK"
); //outputs DataItem: NULL
}
...
private void handler( object sender, DataGridItemEventArgs e ) {
Console.WriteLine( "DataItem: " + (e.Item.DataItem ==
null?"NULL":"OK" ); //outputs DataItem: OK
}
I do not believe that this is the correct behavior. Instead, I believe
that the DataItem should be non-null. The cause of the null DataItem
appears to originate in the DataGrid.CreateItem method in the code block
starting at line 858:
if (no_pager && data_bind) {
res.DataBind ();
OnItemDataBound (args);
res.DataItem = null; <------****HERE
}
Can anyone tell me why this is set to null? If there is a reason for it,
it is unintuitive to me.
Thanks, Cullen
More information about the Mono-devel-list
mailing list