0

我在我的DataGridViewComboBoxColumn中有奇怪的結果。DataGridComboBoxColumn在CellEnter上顯示第一個值

1)當沒有設置值時,我單擊單元格(而不是下拉箭頭)時,選項中的第一個值顯示爲值,當單擊單元格時,它將返回空白值。這是誤導,因爲沒有選擇任何值,但它顯示的第一個值,直到你點擊單元格。

一種解決方案是使第一個選項空白,但此後我仍然在下一期的折磨......

2)如果我選擇一個已經有值的單元格,然後選擇做一個細胞不是,最初選定的值將顯示在沒有選定值的單元格中。再次,單擊單元格將清除它,但是,它又是誤導。

我想使這不會誤導...任何人都知道的解決方案?

DataGridViewComboBoxColumn col = new DataGridViewComboBoxColumn(); 

DataTable dt = new DataTable(); 
dt.Columns.Add("f_Id"); 
dt.Columns[0].DataType = typeof(string); 
dt.Columns.Add("f_Desc"); 
dt.Columns[1].DataType = typeof(string); 

for (int i = 0; i < values.Count(); i++) 
{ 
    dt.Rows.Add(values[i], values[i]); 
} 

col.DataSource = dt; 
col.DisplayMember = dt.Columns[1].ColumnName; 
col.ValueMember = dt.Columns[0].ColumnName; 
col.HeaderText = header; 
col.Name = header; 

DataGridView1.Columns.Add(col); 
+0

沒有人知道這一切嗎?這是微軟的默認設置,非常煩人。 – Tizz 2013-04-25 15:56:55

回答

1

這一直困擾我一段時間,以及Zeeshanef的代碼幫助,但仍然不能完全解決它對我來說。經過進一步調查,我發現如果使用DefaultValuesNeeded方法設置某些默認值,可能會設置單元格值,但在EditingControlShowing方法中顯示的組合框控件具有空值/文本。我通過調整代碼來解決它:

private void datagridview1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
    { 
     if (e.Control is ComboBox)     
     { 
      ComboBox comboBox = (ComboBox)e.Control; 
      if (datagridview1.CurrentCell.Value == null 
       || string.IsNullOrEmpty(datagridview1.CurrentCell.Value.ToString()) 
       || string.IsNullOrEmpty(comboBox.SelectedText) 
       ) 
      { 
       comboBox.SelectedIndex = -1; 
      }    
     } 
    } 
1

我也在尋找這個,並最終解決了這個問題。 創建DatagridView的以下事件並將[comboboxcolumnNo]設置爲您的datagridcombobox列號。

現在每當combobox列將焦點進行編輯時,它將檢查當前單元格值是否爲null,如果它爲null,那麼它將顯示-1指數的combobox,它什麼都不顯示。

private void datagridview1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
    { 
     if (datagridview1.CurrentCell.ColumnIndex == comboboxcolumnNo && e.Control is ComboBox) 
     { 
      ComboBox comboBox = (ComboBox)e.Control; 
      if (datagridview1.CurrentCell.Value == null) 
      { 
       comboBox.SelectedIndex = -1; 
      } 
     } 
    } 
相關問題