带有额外列的C#DataBound DataGridView - 此列中的更改在排序时丢失?

时间:2013-05-15 12:34:16

标签: c# datagridview datasource bindingsource datagridviewcheckboxcell

我使用DataGridView,它通过绑定源进行数据绑定。另外,我在最左边为用户创建了一个CheckBoxCol。检查那里的框然后重新排序使所有检查消失。有谁知道如何避免这种情况?

这是一些代码,所以我们在同一页面上;):

    dtZg_Betr = new DataTable(); // DataTable object
    // [...] SQL SELECT and so on, I cut that stuff a bit
    adapter.Fill(dtZg_Betr); // OleDbAdapter -> fill the table with the SQL SELECT results
    // [...]
    bsZg_Betrn = new BindingSource(); // BindingSource object
    bsZg_Betrn.DataSource = dtZg_Betr;
    dgvZg_Betr.DataSource = bsZg_Betr; // bind data to DataGridView
    DataGridViewCheckBoxColumn dgvCheckBox = new DataGridViewCheckBoxColumn();
    dgvZg_Betr.Columns.Insert(0, (DataGridViewColumn)dgvCheckBox); // add additional checkbox column


    // Later on somewhere else:
    adapter.Update(dtZg_Betr); // OleDbAdapter -> update DB with table's changes

DataGridView没有其他代码可以填充,稍后当然会有复选框点击,这样会被处理,但这与问题无关。

种类问候!

2 个答案:

答案 0 :(得分:1)

您需要dtResult中的额外列来存储该项是否已被选中。如果该信息可以存储在数据源中,则数据控件仅保留帖子之间的项目信息。

答案 1 :(得分:1)

参考Renan关于这个额外专栏的提示,这就是我所做的:

我想我已经想出了一个很好的解决方案:

填写DataTable后,手动添加bool列:

// [...]
adapter.Fill(dtZg_Betr);
bsZg_Betrn = new BindingSource(); // BindingSource object
bsZg_Betrn.DataSource = dtZg_Betr;
dgvZg_Betr.DataSource = bsZg_Betr; // bind data to DataGridView

这不会影响“RowsChanged”事件,因为它是一个添加的列,在执行之前

adapter.Update(dtZg_Betr);

你可以简单地删除/删除它(不应该有任何区别,因为添加的列在删除时也不会影响任何ChangesEvent)

dtZg_Betr.Columns[0].Remove(); // or Columns.Delete(...)