【发布时间】:2016-12-18 07:26:49
【问题描述】:
我需要一些帮助。 我有一个 DataGridView,它只是一个绑定到 BindingList 的只读。 我首先为新列表设置数据源,然后将项目添加到列表中。 列是自动生成的。 当我需要重新加载页面时,我只需清除列表并再次添加项目。
如果我使用 UI 重新加载页面同步,它可以正常工作,但如果我启动一项任务并执行此操作,则在 BindingList 上调用 Clear() 会失败并出现异常:
System.IndexOutOfRangeException was unhandled
HResult=-2146233080
Message=Index 0 does not have a value.
Source=System.Windows.Forms
StackTrace:
at System.Windows.Forms.CurrencyManager.get_Item(Int32 index)
at InCare.UserControls.DataGridViewItemWrapper.DataGridViewOnRowsAdded(Object sender, DataGridViewRowPostPaintEventArgs args) in C:\ws\Source\Repos\incare\Src\InCare.UserControls\DataGridViewItemWrapper.cs:line 40
at System.Windows.Forms.DataGridViewRowPostPaintEventHandler.Invoke(Object sender, DataGridViewRowPostPaintEventArgs e)
at System.Windows.Forms.DataGridView.OnRowPostPaint(DataGridViewRowPostPaintEventArgs e)
at System.Windows.Forms.DataGridView.PaintRows(Graphics g, Rectangle boundingRect, Rectangle clipRect, Boolean singleHorizontalBorderAdded)
at System.Windows.Forms.DataGridView.PaintGrid(Graphics g, Rectangle gridBounds, Rectangle clipRect, Boolean singleVerticalBorderAdded, Boolean singleHorizontalBorderAdded)
at System.Windows.Forms.DataGridView.OnPaint(PaintEventArgs e)
at System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e, Int16 layer)
at System.Windows.Forms.Control.WmPaint(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
【问题讨论】:
-
BindingList不是线程安全的。这就是它失败的原因。
标签: c# datagridview bindinglist