Cum de a schimba stilul de celule ComboBox în DataGridViewComboBoxColumn

Celulele din DataGridViewComboBoxColumn au ComboBoxStyle DropDownList. Aceasta înseamnă că utilizatorul poate selecta numai valori din meniul derulant. Controlul subiacent este ComboBox, deci poate avea stil DropDown. Cum schimb stilul casetei combo de bază din DataGridViewComboBoxColumn. Sau, mai general, pot avea o coloană în DataGridView cu meniul dropdown unde utilizatorul poate tasta?

7

3 răspunsuri

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

4
adăugat
Aceasta este doar ideea soluției. Soluția completă necesită o rutină de validare, altfel DataGridView va arunca o excepție. Soluția utilă necesită adesea o listă specifică celulelor în meniul derulant.
adăugat autor chgman, sursa

Soluția următoare funcționează pentru mine

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;
        }
    }
}
2
adăugat
dacă condiția dată dacă întotdeauna se dovedește a fi adevărată în comboboxul meu datorează ... există o muncă în jurul ... condiție dată: ====================== ====================================== & zwnj; ======= dacă ( ! Column1.Items.Contains (e.FormattedValue.ToString ())) {Column1.Items.Add (e.FormattedValue); dataGridView1.Rows [e.RowIndex] .Celuri [e.ColumnIndex] .Value = e.FormattedValue; }
adăugat autor Asad Malik, sursa
if (!Column1.Items.Contains(e.FormattedValue.ToString())) { 
    Column1.Items.Add(e.FormattedValue);     
    dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = e.FormattedValue; 
}  

se poate întoarce întotdeauna adevărat deoarece Column1.Items.Contains() caută valori String . dacă e.FormattedValue nu este un String atunci compararea va eșua.

încerca

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

sau

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