2008-10-14 11 views
7

Les cellules de DataGridViewComboBoxColumn ont ComboBoxStyle DropDownList. Cela signifie que l'utilisateur peut uniquement sélectionner des valeurs dans la liste déroulante. Le contrôle sous-jacent est ComboBox, donc il peut avoir le style DropDown. Comment puis-je modifier le style de la zone de liste déroulante sous-jacente dans DataGridViewComboBoxColumn. Ou, plus général, puis-je avoir une colonne dans DataGridView avec une liste déroulante où l'utilisateur peut taper?Comment faire pour modifier le style ComboBox de la cellule dans DataGridViewComboBoxColumn

Répondre

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

Ceci est seulement idée de la solution. La solution complète nécessite une routine de validation, sinon DataGridView lèvera une exception. La solution utile nécessite souvent une liste spécifique aux cellules dans la liste déroulante. – chgman

2

Après solution fonctionne pour moi

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

la donnée si la condition se révèle toujours être vrai dans mon databounded ... combobox est là un travail autour ... condition donnée: ================= ============================================= if (! Column1.Items.Contains (e.FormattedValue.ToString())) { Column1.Items.Add (e.FormattedValue); dataGridView1.Rows [e.RowIndex] .Cells [e.ColumnIndex] .Value = e.FormattedValue; } –

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

peut toujours retourner vrai parce que Column1.Items.Contains() est à la recherche de valeurs String. si e.FormattedValue n'est pas un String alors la comparaison échouera.

essayer

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

ou

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