【问题标题】:How to handle text changing in DataGridViewTextBoxColumn如何处理 DataGridViewTextBoxColumn 中的文本更改
【发布时间】:2015-05-20 03:00:20
【问题描述】:

我有一个包含 DataGridViewTextBoxColumn 和 DataGridViewComboBoxColumn 的 dataGridView。 组合框绑定到数据源,但文本框没有。

我希望当 TextBox 发生变化时,comboBox 的 selectedValue 设置为 textBox 文本。

当我将此代码放在 dataGridView 的 cellLeave 处理程序中时,comboBox 的 selectedValue 不会改变!这是因为此处理程序在更改 textBox 的值之前启动。

((DataGridViewComboBoxCell)DgvA.Rows[DgvA.SelectedRows[0].Index].Cells[1]).Value = DgvA.Rows[DgvA.SelectedRows[0].Index].Cells[0].Value;

有人知道怎么做吗?

【问题讨论】:

  • 为什么在CellValueChanged 时使用CellLeave 事件?它会在你想要的时候触发......当单元格的值发生变化时。
  • 谢谢@Anthony.i 追踪了你所说的,但 CellValueChanged 没有启动!
  • 请注意,在编辑完单元格的值之前,单元格的值不会改变,这可以通过离开单元格来表示。如果您在用户编辑单元格值时需要文本值,则需要挂钩到列的 DataGridViewTextBoxEditingControl,在 the answer below 中提到。

标签: c# winforms datagridview combobox windows-forms-designer


【解决方案1】:

Thers 不是 datagridviewTextboxColumn textchanged 的​​默认处理程序。您必须实现处理程序。

当您开始编辑 DataGridViewTextBoxColumn 中的单元格时,它不像您有一个 TextBox。您实际上确实有一个文本框。一个 TextBox(更具体地说,一个继承 TextBox 的 DataGridViewTextBoxEditingControl)被创建并嵌入到单元格中。可以在 EditingControlShowing 事件处理程序中访问该控件。您可以将方法附加到该控件的 TextChanged 事件,就像其他任何方法一样。

也就是说,网格实际上并没有仅仅因为编辑控件包含更改。如果用户按下 Escape 键,则编辑控件中的更改将被丢弃,并且永远不会下推到网格中。在引发 CellValueChanged 事件之前,网格不包含更改。

您可以在此链接中尝试此代码。

https://infynet.wordpress.com/2012/01/24/textbox-text-changed-event-on-datagridview-cell/

【讨论】:

    【解决方案2】:

    如果组合框不是查找组合框,您可以将两列绑定到同一个属性。 否则,您可以使用将数据复制到并用于绑定的视图模型(请参阅 MVVM)。在此视图模型中,您将有 2 个属性,一个用于文本框,一个用于组合框的(键值)。文本框的一个将在其设置器中更新另一个将触发属性更改事件并更新组合框。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-14
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      • 2022-09-30
      相关资源
      最近更新 更多