2008-10-14 61 views
7

DataGridViewComboBoxColumn中的單元格具有ComboBoxStyle DropDownList。這意味着用戶只能從下拉列表中選擇值。底層控件是ComboBox,所以它可以有DropDown樣式。如何更改DataGridViewComboBoxColumn中基礎組合框的樣式。或者,更一般的,我可以在DataGridView中的下拉列表中的用戶可以鍵入?如何在DataGridViewComboBoxColumn中更改單元格的組合框樣式

回答

4
void dataGridView1_EditingControlShowing(object sender, 
    DataGridViewEditingControlShowingEventArgs e) 
{ 
    if (e.Control.GetType() == typeof(DataGridViewComboBoxEditingControl)) 
    { 
     DataGridViewComboBoxEditingControl cbo = 
      e.Control as DataGridViewComboBoxEditingControl; 
     cbo.DropDownStyle = ComboBoxStyle.DropDown; 
    } 
} 

Problem with combobox and databound datagridview

+0

這是解決問題的唯一的想法。完整的解決方案需要驗證例程,否則DataGridView將拋出異常。有用的解決方案通常還需要下拉列表中的特定於單元格的列表 – chgman 2008-10-15 01:58:19

2

以下解決方案適用於我,因爲 Column1.Items.Contains() 正在搜索String

private void dataGridView1_CellValidating(object sender, 
    DataGridViewCellValidatingEventArgs e) 
{ 
    if (e.ColumnIndex == Column1.Index) 
    { 
     // Add the value to column's Items to pass validation 
     if (!Column1.Items.Contains(e.FormattedValue.ToString())) 
     { 
      Column1.Items.Add(e.FormattedValue); 
      dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = 
       e.FormattedValue; 
     } 
    } 
} 

private void dataGridView1_EditingControlShowing(object sender, 
    DataGridViewEditingControlShowingEventArgs e) 
{ 
    if (dataGridView1.CurrentCell.ColumnIndex == Column1.Index) 
    { 
     ComboBox cb = (ComboBox)e.Control; 
     if (cb != null) 
     { 
      cb.Items.Clear(); 
      // Customize content of the dropdown list 
      cb.Items.AddRange(appropriateCollectionOfStrings); 
      cb.DropDownStyle = ComboBoxStyle.DropDown; 
     } 
    } 
} 
+0

給定的條件總是在我的數據組合框中是真的... 是否有工作... 給出條件: ================= ==================================================如果(!Column1.Items.Contains(e.FormattedValue.ToString())){ Column1.Items.Add(e.FormattedValue); dataGridView1.Rows [e.RowIndex] .Cells [e.ColumnIndex] .Value = e.FormattedValue; } – 2009-05-06 05:58:59

1
if (!Column1.Items.Contains(e.FormattedValue.ToString())) { 
    Column1.Items.Add(e.FormattedValue);  
    dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = e.FormattedValue; 
} 

可能總是返回true。 如果e.FormattedValue不是String那麼比較將失敗。

嘗試

if (!Column1.Items.Contains(e.FormattedValue.ToString())) { 
    Column1.Items.Add(e.FormattedValue.ToString());  
    dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = e.FormattedValue.ToString(); 
} 

if (!Column1.Items.Contains(e.FormattedValue)) { 
    Column1.Items.Add(e.FormattedValue); 
    dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = e.FormattedValue; 
} 
相關問題