【问题标题】:The value of the DatagridView's cell appears to change, but it does notDatagridView 的单元格的值似乎发生了变化,但它没有
【发布时间】:2022-01-26 19:48:30
【问题描述】:

我有一个 DatagridView,它的 DataSource 是一个 DataTable。 当我在运行时更改单元格的值时,它似乎变化良好。

但是,如果我尝试通过单击 DatagridView 中的一行将 DataGridView 中的值分配给变量,则该变量将获取原始 (DataTable) 值,而不是单元格的值。

copy = DataGridView2.Item(7, i).Value

单元格列的 ReadOnly 属性为 false。

有什么建议吗?

【问题讨论】:

  • 致电 Validate()EndEdit()(取决于上下文),请参阅,例如,Bound DataGridView not updating to display information + sorting issues
  • 如果网格使用数据源,那么从技术上讲,如果单元格值发生更改,DataSource 应该会得到更新。你在哪里打电话copy = DataGridView2.Item(7, i).Value...? ......您能否提供一个minimal reproducible example 来重现您所描述的内容。
  • @Jimi 我已根据您的建议修改了我的代码。我有一个BindigSource,其DataSourceDataTable。我的DataGridViewDataSource 现在是BindingSourceCellValueChanged 事件调用EndEdit() 方法。不幸的是,旧值仍然被变量占用。可能是什么问题?
  • 您需要发布您的代码。重现您所描述的行为所需的所有代码。例如,旧值仍由变量获取:您何时在哪里读取此值? -- 请注意,在CellValueChanged 中调用EndEdit() 应谨慎(可能有副作用);见那里的注释。当您希望立即应用特定值时,可以使用它。
  • 感谢您的帮助,但与此同时我想出了一个可行的解决方案。

标签: vb.net datatable datagridview datasource


【解决方案1】:

我能够用这种方法解决问题:

Private Sub DataGridView2_CellEndEdit(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView2.CellEndEdit
    Dim i As Integer
    i = DataGridView2.CurrentRow.Index
    DataGridView2.DataSource.Rows(i)("copy") = DataGridView2.CurrentCell.Value        
End Sub

这样,在我覆盖 DatagridView 中单元格的值后,变量将采用正确的值。

【讨论】:

  • 我们很高兴您能完成这项工作,但是,您的回答中有一件事可能会导致代码抓取错误的单元格。您的答案“假设”网格及其DataSource 是一对一的关系……即……网格中的第 1 行是数据源中的第 1 行。这可能并非总是如此,例如,如果网格已排序或过滤。您可能需要查看网格行的 DataBoundItem 属性。
  • 如果每次网格中的单元格结束编辑,代码都会执行“额外”步骤,将网格单元格中的值放入DataTable/Source中的同一单元格中... THEN...为什么要打扰DataTable?只需从网格中获取数据!我只是说代码正在做一些“应该”自动为你完成的事情,而你“应该”问为什么不这样做。
猜你喜欢
  • 2014-03-24
  • 1970-01-01
  • 1970-01-01
  • 2017-08-02
  • 1970-01-01
  • 1970-01-01
  • 2018-09-26
  • 1970-01-01
相关资源
最近更新 更多