【问题标题】:checkbox & datagridview not reading new column, write works fine (c#)复选框和 datagridview 不读取新列,写入工作正常(c#)
【发布时间】:2013-04-30 04:59:27
【问题描述】:

我有绑定到数据源(基于 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 分钟的更改,但我没有想法。提前感谢您提供任何见解。

【问题讨论】:

    标签: c# winforms binding datagridview


    【解决方案1】:

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

    还有一行

    vwTILEAdminTableAdapter.Fill(tILEDataSet.vwTILEAdmin);
    

    应该足以刷新数据。

    【讨论】:

    • 是的,如果列不存在,则写入将不起作用。无论如何,我可以通过指向数据源的一个新实例来解决这个问题。似乎对底层数据源的现有 xsd 进行更改可能与问题有关。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    相关资源
    最近更新 更多