如何处理 DataGridViewTextBoxColumn 中的文本更改

How to handle text changing in DataGridViewTextBoxColumn

我有一个包含 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;

有人知道怎么做吗?

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

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

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

您可以在此 link 中尝试此代码。

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

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