3


尝试填充绑定源时出现一个错误。例外情况如下;

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);
  }

我尝试重置数据源属性,但仍然是同样的问题。

请帮我解决这个问题。

4

5 回答 5

9

据我了解,您不必填充 BindingSource,只需填充它绑定到的列表。这就是绑定的全部想法。使用 bindingsource 将控件绑定到数据。

接着

myBindingSource.DataSource = listItem;

会做的。

此外,您可以将 datagridview 绑定到 BindingList,而不是将 datagridview 绑定到 BindingSource 并将 BindingSource 绑定到列表。与List类似,但也实现了IBindingList接口(当你将BindingList对象设置为List时,它会返回一个实现IBindingList的对象,所以会很相似)

你可以这样做:

myDataGridView.DataSource = myBindingList;

如果 myBindingList 上项目的属性发生变化,结果将默认反映在 datagridview 上,如果集合发生变化(添加或删除某些内容),您可以使用以下方法刷新它:

 CurrencyManager cm = (CurrencyManager)this.myDataGridView.BindingContext[myBindingList];
 if (cm != null)
 {
    cm.Refresh();
 }
于 2011-10-12T09:12:40.413 回答
3

这段代码已经解决了这个问题:

grdOrders.DataSource = null;
grdOrders.DataSource = this._controller.OrderActionData;
于 2017-10-07T09:47:39.753 回答
1

当列表不再与 DataGridView 同步时会发生错误。

您可以在列表更改后手动刷新绑定,以确保绑定再次同步:

myBindingSource.CurrencyManager.Refresh();
于 2016-01-07T14:21:55.897 回答
0

我在这里在黑暗中拍摄,但假设这是伪代码,那么您需要将 UI 元素的数据源设置为绑定源。此外,做这样的事情可能更容易:

var binding = new BindingSource();
binding.DataSource = listItem;
DataGridView.DataSource = binding;

可以在此处找到有关 BindingSource 的更多信息:http: //msdn.microsoft.com/en-us/library/system.windows.forms.bindingsource.aspx

于 2011-10-12T09:10:22.837 回答
0

我只是在关闭表单之前设置了 ItemsBindingSource.DataSource = Nothing(“Items”是表的名称)。所以我有...

Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click
    ItemsBindingSource.DataSource = Nothing
    Me.Close()
End Sub

可能不对,但我没有得到错误。

于 2019-08-12T05:59:35.193 回答