編輯單元格中的ComboBox
編輯控件更改其選擇後,如何強制引發DataGridView.CellValueChanged
事件(並將其更改爲DataGridViewCell.Value
屬性)?默認情況下,該事件僅在具有ComboBox的單元失去焦點後纔會引發。當組合框中的選擇更改時,DataGridView中的提交已更改
4
A
回答
6
我解決了它這樣做:
myDataGridView.EditingControlShowing += new System.Windows.Forms.DataGridViewEditingControlShowingEventHandler(myDataGridView_EditingControlShowing);
private void myDataGridView_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (e.Control.GetType() == typeof(DataGridViewComboBoxEditingControl))
{
ComboBox cmb = (ComboBox)e.Control;
cmb.SelectionChangeCommitted -= new EventHandler(cmb_SelectionChangeCommitted);
cmb.SelectionChangeCommitted += new EventHandler(cmb_SelectionChangeCommitted);
}
}
void cmb_SelectionChangeCommitted(object sender, EventArgs e)
{
dgvPresupuesto.CurrentCell.Value = ((DataGridViewComboBoxEditingControl)sender).EditingControlFormattedValue;
}
0
組合框的值的變化實際上是與網格關聯的編輯控件。 因此,要啓動什麼,你將不得不添加這些在DataGrid的EditingControlShowing事件爲特定列
private void dg_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (dg.CurrentCell.ColumnIndex == 0)
{
ComboBox cmbox = e.Control as ComboBox;
cmbox.SelectedValueChanged += new EventHandler(cmbox_SelectedValueChanged);
}
}
你可以調用在下拉列表中選擇cvalue改變事件的單元格的值更改事件
2
我最終這樣做了。我不知道如果是這樣的「首選」的方式或是否會產生任何副作用以後,但現在它似乎工作:
this.gridView.EditingControlShowing += this.GridViewOnEditingControlShowing;
private void GridViewOnEditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
ComboBox cellComboBox = e.Control as ComboBox;
if (cellComboBox != null)
{
// make sure the handler doen't get registered twice
cellComboBox.SelectionChangeCommitted -= this.CellComboBoxOnelectionChangeCommitted;
cellComboBox.SelectionChangeCommitted += this.CellComboBoxOnelectionChangeCommitted;
}
}
private void CellComboBoxOnelectionChangeCommitted(object sender, EventArgs e)
{
DataGridViewComboBoxEditingControl comboBox = sender as DataGridViewComboBoxEditingControl;
if (sender == null)
{
return;
}
if (comboBox.SelectedValue == null)
{
return;
}
if (this.gridView.CurrentCell.Value == comboBox.SelectedValue)
{
return;
}
this.gridView.CurrentCell.Value = comboBox.SelectedValue;
}
相關問題
- 1. 已選擇項目更改組合框
- 2. 當組合框選擇時從mysql中更改文本框值
- 3. WPF組合框選擇更改TabItem選擇更改
- 4. 爲什麼文本更改組合框中選擇更改
- 5. 當選擇不同的值時,組合框不會更改值
- 6. Xaml當組合框選擇變化時更改TextBlock的文本
- 7. 綁定ischecked選擇wpf列表框中的複選框已更改組合框
- 8. Silverlight組合框選擇已更改或重新選擇事件
- 9. 在組合框中選擇更改時動態更改列表框項目
- 10. DataGridView ComboBox列選擇已更改事件
- 11. 當在DataGridView組合框單元格中發生選擇更改時更新相鄰單元格的數據源
- 12. 在行更改前提交DataGridView中的更改
- 13. 當複選框值更改時,更改WPF組合框上的數據綁定
- 14. 從DataGridView中的ComboBoxColumn更改選擇
- 15. Rails,當用戶選擇組合框值時更改db值
- 16. Datagridview中的複選框無法更改
- 17. 組合框選定索引更改所有組合框更改
- 18. 提交表單之前,組合框選定的值更改
- 19. 當單擊組合框值時,DataGridView列標題更改
- 20. 當選擇更改時,自動取消DataForm中的更改
- 21. 在組合框中選擇文本時更改標籤VB.Net
- 22. 當選擇框更改時傳遞值
- 23. 如何更改組合框中的選擇jqgrid的主題
- 24. 更改選擇框更改的佈局
- 25. 在datagridview中更改組合框在運行時
- 26. 當從組合框更改值時更改價格PHP
- 27. 根據文檔中的書籤更改組合框選擇
- 28. JS jQuery UI的組合框中選擇更改事件
- 29. 根據組合框中的選擇動態更改html標籤
- 30. html選擇標記從已選中的複選框更改
這方法不起作用,因爲該值尚未提交給底層DataGridViewCell.Value和DataGridView.CellValueChanged的EventHandler,我無法確定新值是什麼。我需要找到一種方法來強制datagrid本身將更改提交給單元格並引發`CellValueChanged`事件。 – bitbonk 2011-01-20 08:51:41
在這種情況下,您可以使用SendKeys.Send(「{TAB}」)觸發TAB事件;在組合框事件處理程序中強制單元失去焦點,最終觸發網格的CellValueChanged – V4Vendetta 2011-01-20 10:32:08
這也不理想,因爲當前單元格將失去焦點。這不應該發生在我的情況。 – bitbonk 2011-01-20 13:02:16