Datagridview错误System.IndexOutOfRangeException:索引0没有值

Vij*_*ade 1 c# datagridview bindingsource indexoutofboundsexception


当我尝试填充绑定源时,我收到一个错误.例外情况如下;

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)
Run Code Online (Sandbox Code Playgroud)

我正在使用通用列表来填充绑定源.代码看起来像,

foreach (listItem)
  {
      BindingSource.Add(listItem);
  }
Run Code Online (Sandbox Code Playgroud)

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

请帮我解决这个问题.

Ari*_*rie 6

据我所知,你不必填充BindingSource,你只需要填充它所绑定的列表.这就是绑定的整个想法.使用bindingsource将控件绑定到数据.

然后

myBindingSource.DataSource = listItem;
Run Code Online (Sandbox Code Playgroud)

会做的.

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

你可以做的Sou:

myDataGridView.DataSource = myBindingList;
Run Code Online (Sandbox Code Playgroud)

如果myBindingList上的项属性发生更改,则默认情况下结果将反映在datagridview上,如果集合已更改(某些内容已添加或删除),您可以使用以下命令刷新它:

 CurrencyManager cm = (CurrencyManager)this.myDataGridView.BindingContext[myBindingList];
 if (cm != null)
 {
    cm.Refresh();
 }
Run Code Online (Sandbox Code Playgroud)