Datagridview error系统.IndexOutOfRangeException:索引0没有值
本文关键字:索引 error 系统 IndexOutOfRangeException Datagridview | 更新日期: 2023-09-27 18:11:06
当我试图填充绑定源时,我得到一个错误。例外情况如下:
System.IndexOutOfRangeException: Index 0 does not have a value.
at System.Windows.Forms.CurrencyManager.get_Item(Int32 index)
at System.Windows.Forms.DataGridView.DataGridViewDataConnection.GetError(Int32 rowIndex)
我使用通用列表来填充绑定源。代码看起来像,
foreach (listItem)
{
BindingSource.Add(listItem);
}
我尝试重置数据源属性,但仍然是相同的问题。
请帮我解决这个问题
据我所知,您不必填充BindingSource,只需填充它绑定到的列表。这就是绑定的全部思想。您可以使用bindingsource将控件绑定到数据。
和
myBindingSource.DataSource = listItem;
可以。
同样,你可以把你的datagridview绑定到BindingSource和BindingSource绑定到list,而不是把你的datagridview绑定到BindingList。它类似于List,但也实现了IBindingList接口(当您将BindingList对象设置为List时,它将返回一个实现IBindingList的对象,因此它将非常相似)
你可以这样做:
myDataGridView.DataSource = myBindingList;
如果myBindingList上的项目属性发生了变化,默认情况下结果将反映在datagridview上,如果集合发生了变化(有些东西被添加或删除),您可以使用:
CurrencyManager cm = (CurrencyManager)this.myDataGridView.BindingContext[myBindingList];
if (cm != null)
{
cm.Refresh();
}
下面的代码已经解决了这个问题:
grdOrders.DataSource = null;
grdOrders.DataSource = this._controller.OrderActionData;
当列表不再与DataGridView同步时发生错误。
您可以在列表更改后手动刷新绑定,以确保绑定再次同步:
myBindingSource.CurrencyManager.Refresh();
我在黑暗中拍摄,但假设这是伪代码,那么你需要将UI元素的数据源设置为绑定源。同样,这样做可能更容易:
var binding = new BindingSource();
binding.DataSource = listItem;
DataGridView.DataSource = binding;
关于BindingSource的更多信息可以在这里找到:http://msdn.microsoft.com/en-us/library/system.windows.forms.bindingsource.aspx
我刚刚设置了ItemsBindingSource。DataSource = Nothing("Items"是表的名称),就在我关闭表单之前。所以我有…
Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click
ItemsBindingSource.DataSource = Nothing
Me.Close()
End Sub
可能不正确,但我不知道错误。