1

我有绑定到数据源(基于 SQL 视图的数据集)的 datagridview。它主要由带有几个复选框的文本框组成。在包含 DGV 的表单上,有用于编辑每一列的控件。在 Form_Load 上,视图被填充了 SQL 视图的内容。这是使用表格适配器的填充命令完成的,并且效果很好。

现在,我通过修改数据源以包含一个新的位值来向 DGV 添加一个新列。我使用数据网格视图的任务编辑器添加新列。我在表单中添加了一个相应的复选框来设置该列的值,该列绑定到 DGV 使用的绑定源。如果我选中这个新复选框并点击“保存”,数据库将使用新值更新,但此更改不会反映在 DGV 或绑定的复选框控件中。顺序如下:

//execute the update statement:
command.ExecuteNonQuery();

//refill the table:
vwTILEAdminTableAdapter.Fill(tILEDataSet.vwTILEAdmin);

//reset the binding source - maybe the problem is here?
vwTILEAdminBindingSource.DataSource = typeof(TILEDataSet.vwTILEAdminDataTable);
vwTILEAdminBindingSource.DataSource = this.tILEDataSet.vwTILEAdmin;
dataGridView1.DataSource = null;
dataGridView1.DataSource = this.vwTILEAdminBindingSource;
vwTILEAdminBindingSource.ResetBindings(false); // false for data change, true for schema change
vwTILEAdminBindingSource.EndEdit();

过去,当我以任何方式修改 DGV 时,这似乎一直有效。似乎绑定只在一个方向(写入)起作用,因为我可以在每次保存后在 SQL Management Studio 中看到对数据库的更改,但新复选框始终显示零值。我什至尝试删除 DGV 并将其与所有事件一起重新添加。

我今天早上刚刚找到了 EndEdit 命令,但它没有任何区别。我还尝试将 ResetBindings 的参数设置为 true,这也没有任何区别。

我认为这将是 10 分钟的更改,但我没有想法。提前感谢您的任何见解。

4

1 回答 1

0

确保新列位于数据集中的表上,还确保该列位于填充查询的 commandText 中。

另外,线

vwTILEAdminTableAdapter.Fill(tILEDataSet.vwTILEAdmin);

应该足以刷新数据。

于 2013-05-07T13:16:17.560 回答