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)
我尝试重置数据源属性,但仍然是同样的问题.
请帮我解决这个问题.
据我所知,你不必填充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)