2011-02-11 23 views

Respuesta

8
private void GridStockItemEntry_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
    { 

     DataGridViewRow row = GridStockItemEntry.CurrentRow; 
     DataGridViewCell cell = GridStockItemEntry.CurrentCell; 
     if (e.Control.GetType() == typeof(DataGridViewComboBoxEditingControl)) 
     { 

      if (cell == row.Cells["ItemName"] && Convert.ToString(row.Cells["Type"].Value) == "Raw Material") 
      { 
       DataGridViewComboBoxEditingControl cbo = e.Control as DataGridViewComboBoxEditingControl; 

       cbo.DropDownStyle = ComboBoxStyle.DropDown; 

       cbo.Validating += new CancelEventHandler(cbo_Validating); 
      } 
     } 


    } 
    void cbo_Validating(object sender, CancelEventArgs e) 
    { 

     DataGridViewComboBoxEditingControl cbo = sender as DataGridViewComboBoxEditingControl; 

     DataGridView grid = cbo.EditingControlDataGridView; 

     object value = cbo.Text; 

     // Add value to list if not there 

     if (cbo.Items.IndexOf(value) == -1) 
     { 

      DataGridViewComboBoxCell cboCol = (DataGridViewComboBoxCell)grid.CurrentCell; 

      // Must add to both the current combobox as well as the template, to avoid duplicate entries... 

      cbo.Items.Add(value); 

      cboCol.Items.Add(value); 

      grid.CurrentCell.Value = value; 

     } 

    } 
+0

cbo_validating() se llama continuamente incluso cuando estoy configurando e.cancel como verdadero. ¿Hay alguna razón específica? – gulshanm01

-1

Asegúrese de que EditMode propiedad del DataGridView se establece en EditOnKeystrokeOrF2

Asimismo, compruebe que ReadOnly propiedad se establece en False.

+0

doesnot permiten cuadro combinado – Even

+0

Lo que no permite el cuadro combinado? Acabo de probar una vista de cuadrícula con estas propiedades Y un cuadro combinado en una columna. – tzup

+0

estas opciones no funcionarán datagridview. según su respuesta, solo permitirá seleccionar el valor del cuadro combinado, no permitirá ingresar texto –

1

Tal vez, este ejemplo es mejor legibles:

private void datagridview_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { 
     DataGridView dgv = (DataGridView)sender; 
     if(dgv.CurrentCell.ColumnIndex==dgv.Columns["ColumnName"].Index) { 
      ComboBox cbx = (ComboBox)e.Control; 
      cbx.DropDownStyle = ComboBoxStyle.DropDown; 
      cbx.AutoCompleteSource = AutoCompleteSource.ListItems; 
      cbx.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest; 
     } 
    } 
Cuestiones relacionadas