焦点时DataGridView ComboBox不保存
Posted
技术标签:
【中文标题】焦点时DataGridView ComboBox不保存【英文标题】:DataGridView ComboBox doesn't save when focus 【发布时间】:2011-09-28 08:01:37 【问题描述】:在 DataGridView ComboBox 中选择一个值并单击 bindingnavigator 中的保存按钮后,数据库中的数据不会更新。用户必须失去焦点才能更新数据。有没有办法解决这个问题?
【问题讨论】:
通常当你点击按钮时它会获得焦点,我认为还有其他东西可以展示你是如何做到这一点的? 【参考方案1】:很奇怪。我最近这样做了,它就像一个魅力。在我的应用程序中,当 gridview 处于编辑模式(只读 false)时,当您选择单元格时,它将成为组合框,当您离开单元格时,它将表现为文本框。这就是我所做的
void dgUpdateItems_CellEnter(object sender, DataGridViewCellEventArgs e)
DataGridView dg = (DataGridView)sender;
if (e.ColumnIndex == dg.Columns["ItemCategory"].Index)
if (e.ColumnIndex == e.RowIndex)
dg[e.ColumnIndex, e.RowIndex].ReadOnly = true;
return;
DataGridViewComboBoxCell cmbCell = new DataGridViewComboBoxCell();
ComboUpdate(cmbCell);
cmbCell.Value = ((DataGridView)sender)[e.ColumnIndex, e.RowIndex].Value.ToString();
((DataGridView)sender)[e.ColumnIndex, e.RowIndex] = cmbCell;
void dgUpdateItems_CellLeave(object sender, DataGridViewCellEventArgs e)
DataGridView dg = (DataGridView)sender;
if (e.ColumnIndex == dg.Columns["ItemCategory"].Index)
if (e.ColumnIndex == e.RowIndex)
return;
string str = dg[e.ColumnIndex, e.RowIndex].Value.ToString();
DataGridViewComboBoxCell cmb = (DataGridViewComboBoxCell)dg[e.ColumnIndex, e.RowIndex];
string val = cmb.Value.ToString();
dg[e.ColumnIndex, e.RowIndex] = new DataGridViewTextBoxCell();
dg[e.ColumnIndex, e.RowIndex].Value = val;
如果不理解,这是我代码的一部分,请告诉我。 这是一个链接检查一下。它可能会有所帮助。 ComboBox in DatagridView in Edit Mode
抱歉,忘了告诉你最重要的事情,即使专注,它也有效。 如果您正在寻找其他东西,请在我头上扔石头。 希望对您有所帮助。
【讨论】:
【参考方案2】:在保存之前尝试调用UpdateSource
:
ComboBox c = Keyboard.FocusedElement as ComboBox;
if ((c != null) && (c.GetBindingExpression(ComboBox.TextProperty) != null))
c.GetBindingExpression(ComboBox.TextProperty).UpdateSource();
HTH
【讨论】:
以上是关于焦点时DataGridView ComboBox不保存的主要内容,如果未能解决你的问题,请参考以下文章
C#winform问题 datagridview中combobox选项改变触发事件用哪个方法
当我想更改 datagridview 的 ComboBox 时,它会自动更改相同 DataGridView 的所有其他组合
清除 DataGridView 中的 ComboBox 文本
C#winform问题 datagridview中combobox选项改变触发事件用哪个方法。你是用啥方法解决的啊。