【问题标题】:Delete rows from grid view programmatic以编程方式从网格视图中删除行
【发布时间】:2011-10-31 14:52:16
【问题描述】:

我有gridview,它的数据源是list<string>,我添加了一个复选框列来选择我想要删除的行,然后按删除。

attachdatagrid.DataSource = ConceptProperties.conceptsattachmentsfilename[mouseOverIndex].Select(x => new { FileName = x }).ToList();

问题是我的

gridview 编辑模式

properties是EditOnKeystroke,和我写的时候

if ((bool)dr.Cells[0].Value != false)
                        {
                            found = true;
                            ConceptProperties.conceptsattachments[mouseeditIndex].RemoveAt(dr.Index);
                            ConceptProperties.conceptsattachmentsfilename[mouseeditIndex].RemoveAt(dr.Index);
                            attachdatagrid.Rows.RemoveAt(dr.Index);
                        }

我遇到了异常:

除非 DataGridView 是 数据绑定到支持更改通知的 IBindingList 和 允许删除。

如何删除该行?

【问题讨论】:

    标签: c# winforms datagridview


    【解决方案1】:

    您最好将您的网格绑定到绑定源并对其(绑定源)而不是列表本身进行所有操作。 您可以通过将绑定源组件拖放到表单中,然后将其数据源设置为列表并将网格的数据源设置为绑定源来实现。

    IList 不支持更改通知。 IBindingList(绑定源实现)。

    【讨论】:

      【解决方案2】:

      在您的情况下,应该足以从列表中删除所需的数据,并且由于它绑定到网格,列表中的更改将自动传播到 UI 控件上。

      换句话说:不要打电话给attachdatagrid.Rows.RemoveAt(dr.Index)

      希望这会有所帮助。

      【讨论】:

      • @salamonti:您是否尝试重新分配更改后的列表?我看到你使用了 ToList(),这个方法创建了原始的一个副本,所以你所做的更改不会影响实际绑定到控件的列表。再次重新分配给 DataGrid,就像提供的代码的第一行一样。
      • 但是如果我有多个选中的行,它只会删除第一行,因为它将再次初始化网格数据源,因此它们将被取消选中
      • 从列表中删除所有你需要的元素,然后after重新绑定到控件。
      猜你喜欢
      • 2011-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多