G
Guest
I have a DataGrid and a DataTable. When my form loads I create the DataTable
with the appropriate columns and use it for the DataGrids.DataSource.
Later on in my app, I alter the DataTable:
dt.BeginLoadData();
for(int i = 0; i < _movesArrayList.Count; i++)
{
string[] columnValues = ((string)_movesArrayList).Split(COL_SEPARATOR);
DataRow _moveRow = dt.NewRow();
_moveRow[0] = columnValues[0];
_moveRow[1] = columnValues[1];
_moveRow[2] = columnValues[2];
dt.Rows.Add(_moveRow);
}
dt.EndLoadData();
The thing is, every once in a while my app crashes and I get the following
error:
A first chance exception of type 'System.NullReferenceException' occurred in
system.windows.forms.dll
Additional information: Object reference not set to an instance of an object.
According to the stack trace it occurs at dt.EndLoadData() and in the method
System.Windows.Forms.DataGridToolTip::CreateToolTipHandle()
I can't reliably reproduce it. Has anyone seen anyhting like this before?
Thanks.
Following is the stack trace:
system.windows.forms.dll!System.Windows.Forms.DataGridToolTip::CreateToolTipHandle() + 0x160 bytes
system.windows.forms.dll!System.Windows.Forms.DataGrid::ResetToolTip() +
0x44 bytes
system.windows.forms.dll!System.Windows.Forms.DataGrid::OnLayout(System.Windows.Forms.LayoutEventArgs
levent = {System.Windows.Forms.LayoutEventArgs}) + 0xa7 bytes
system.windows.forms.dll!System.Windows.Forms.Control:erformLayout(System.Windows.Forms.Control
affectedControl = null, String* affectedProperty = null) + 0x7b bytes
system.windows.forms.dll!System.Windows.Forms.Control:erformLayout() +
0x13 bytes
system.windows.forms.dll!System.Windows.Forms.DataGrid::ResetUIState() +
0x34 bytes
system.windows.forms.dll!System.Windows.Forms.DataGrid::SetDataGridRows(System.Windows.Forms.DataGridRow[]
newRows = null, __int32 newRowsLength = 212) + 0x7e bytes
system.windows.forms.dll!System.Windows.Forms.DataGrid::RecreateDataGridRows() + 0x5e bytes
system.windows.forms.dll!System.Windows.Forms.DataGrid:ataSource_Changed(System.Object
sender = {System.Windows.Forms.CurrencyManager}, System.EventArgs ea =
{System.EventArgs}) + 0x143 bytes
system.windows.forms.dll!System.Windows.Forms.DataGrid:ataSource_ItemChanged(System.Object
sender = {System.Windows.Forms.CurrencyManager},
System.Windows.Forms.ItemChangedEventArgs ea = {Index=-1}) + 0x3d bytes
system.windows.forms.dll!System.Windows.Forms.CurrencyManager::OnItemChanged(System.Windows.Forms.ItemChangedEventArgs e = {Index=-1}) + 0xa4 bytes
system.windows.forms.dll!System.Windows.Forms.CurrencyManager::UpdateIsBinding(bool force = false) + 0x12d bytes
system.windows.forms.dll!System.Windows.Forms.CurrencyManager::UpdateIsBinding() + 0x11 bytes
system.windows.forms.dll!System.Windows.Forms.CurrencyManager::List_ListChanged(System.Object
sender = {System.Data.DataView}, System.ComponentModel.ListChangedEventArgs e
= {System.ComponentModel.ListChangedEventArgs}) + 0x159 bytes
system.data.dll!System.Data.DataView::OnListChanged(System.ComponentModel.ListChangedEventArgs
e = {System.ComponentModel.ListChangedEventArgs}) + 0x48 bytes
system.data.dll!System.Data.DataView::IndexListChanged(System.Object sender
= {System.Data.Index}, System.ComponentModel.ListChangedEventArgs e =
{System.ComponentModel.ListChangedEventArgs}) + 0x43 bytes
system.data.dll!System.Data.DataView::FireEvent(System.Data.TargetEvent
targetEvent = IndexListChanged, System.Object sender = {System.Data.Index},
System.EventArgs e = {System.ComponentModel.ListChangedEventArgs}) + 0x4c
bytes
system.data.dll!System.Data.DataViewListener::IndexListChanged(System.Object
sender = {System.Data.Index}, System.ComponentModel.ListChangedEventArgs e =
{System.ComponentModel.ListChangedEventArgs}) + 0x3d bytes
system.data.dll!System.Data.Index::OnListChanged(System.ComponentModel.ListChangedEventArgs e = {System.ComponentModel.ListChangedEventArgs}) + 0x29 bytes
system.data.dll!System.Data.Index::Reset() + 0x1c bytes
system.data.dll!System.Data.DataTable::EndLoadData() + 0xc1 bytes
with the appropriate columns and use it for the DataGrids.DataSource.
Later on in my app, I alter the DataTable:
dt.BeginLoadData();
for(int i = 0; i < _movesArrayList.Count; i++)
{
string[] columnValues = ((string)_movesArrayList).Split(COL_SEPARATOR);
DataRow _moveRow = dt.NewRow();
_moveRow[0] = columnValues[0];
_moveRow[1] = columnValues[1];
_moveRow[2] = columnValues[2];
dt.Rows.Add(_moveRow);
}
dt.EndLoadData();
The thing is, every once in a while my app crashes and I get the following
error:
A first chance exception of type 'System.NullReferenceException' occurred in
system.windows.forms.dll
Additional information: Object reference not set to an instance of an object.
According to the stack trace it occurs at dt.EndLoadData() and in the method
System.Windows.Forms.DataGridToolTip::CreateToolTipHandle()
I can't reliably reproduce it. Has anyone seen anyhting like this before?
Thanks.
Following is the stack trace:
system.windows.forms.dll!System.Windows.Forms.DataGridToolTip::CreateToolTipHandle() + 0x160 bytes
system.windows.forms.dll!System.Windows.Forms.DataGrid::ResetToolTip() +
0x44 bytes
system.windows.forms.dll!System.Windows.Forms.DataGrid::OnLayout(System.Windows.Forms.LayoutEventArgs
levent = {System.Windows.Forms.LayoutEventArgs}) + 0xa7 bytes
system.windows.forms.dll!System.Windows.Forms.Control:erformLayout(System.Windows.Forms.Control
affectedControl = null, String* affectedProperty = null) + 0x7b bytes
system.windows.forms.dll!System.Windows.Forms.Control:erformLayout() +
0x13 bytes
system.windows.forms.dll!System.Windows.Forms.DataGrid::ResetUIState() +
0x34 bytes
system.windows.forms.dll!System.Windows.Forms.DataGrid::SetDataGridRows(System.Windows.Forms.DataGridRow[]
newRows = null, __int32 newRowsLength = 212) + 0x7e bytes
system.windows.forms.dll!System.Windows.Forms.DataGrid::RecreateDataGridRows() + 0x5e bytes
system.windows.forms.dll!System.Windows.Forms.DataGrid:ataSource_Changed(System.Object
sender = {System.Windows.Forms.CurrencyManager}, System.EventArgs ea =
{System.EventArgs}) + 0x143 bytes
system.windows.forms.dll!System.Windows.Forms.DataGrid:ataSource_ItemChanged(System.Object
sender = {System.Windows.Forms.CurrencyManager},
System.Windows.Forms.ItemChangedEventArgs ea = {Index=-1}) + 0x3d bytes
system.windows.forms.dll!System.Windows.Forms.CurrencyManager::OnItemChanged(System.Windows.Forms.ItemChangedEventArgs e = {Index=-1}) + 0xa4 bytes
system.windows.forms.dll!System.Windows.Forms.CurrencyManager::UpdateIsBinding(bool force = false) + 0x12d bytes
system.windows.forms.dll!System.Windows.Forms.CurrencyManager::UpdateIsBinding() + 0x11 bytes
system.windows.forms.dll!System.Windows.Forms.CurrencyManager::List_ListChanged(System.Object
sender = {System.Data.DataView}, System.ComponentModel.ListChangedEventArgs e
= {System.ComponentModel.ListChangedEventArgs}) + 0x159 bytes
system.data.dll!System.Data.DataView::OnListChanged(System.ComponentModel.ListChangedEventArgs
e = {System.ComponentModel.ListChangedEventArgs}) + 0x48 bytes
system.data.dll!System.Data.DataView::IndexListChanged(System.Object sender
= {System.Data.Index}, System.ComponentModel.ListChangedEventArgs e =
{System.ComponentModel.ListChangedEventArgs}) + 0x43 bytes
system.data.dll!System.Data.DataView::FireEvent(System.Data.TargetEvent
targetEvent = IndexListChanged, System.Object sender = {System.Data.Index},
System.EventArgs e = {System.ComponentModel.ListChangedEventArgs}) + 0x4c
bytes
system.data.dll!System.Data.DataViewListener::IndexListChanged(System.Object
sender = {System.Data.Index}, System.ComponentModel.ListChangedEventArgs e =
{System.ComponentModel.ListChangedEventArgs}) + 0x3d bytes
system.data.dll!System.Data.Index::OnListChanged(System.ComponentModel.ListChangedEventArgs e = {System.ComponentModel.ListChangedEventArgs}) + 0x29 bytes
system.data.dll!System.Data.Index::Reset() + 0x1c bytes
system.data.dll!System.Data.DataTable::EndLoadData() + 0xc1 bytes