我使用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没有其他代码可以填充,稍后当然会有复选框点击,这样会被处理,但这与问题无关。
种类问候!
答案 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(...)