如何处理DataGridViewTextBoxColumn中的文本更改

时间:2015-03-17 15:31:54

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

我有一个dataGridView,它包含一个DataGridViewTextBoxColumn和一个DataGridViewComboBoxColumn。 comboBox绑定到dataSource,但textBox不绑定。

我希望当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;

有人知道怎么做吗?

2 个答案:

答案 0 :(得分:2)

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

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

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

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

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

答案 1 :(得分:0)

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