Как изменить стиль ComboBox ячейки в DataGridViewComboBoxColumn - PullRequest
7 голосов
/ 14 октября 2008

Ячейки в DataGridViewComboBoxColumn имеют DropDownList ComboBoxStyle. Это означает, что пользователь может выбрать только значения из выпадающего списка. Базовым элементом управления является ComboBox, поэтому он может иметь стиль DropDown. Как изменить стиль базового поля со списком в DataGridViewComboBoxColumn. Или, в более общем плане, можно ли в DataGridView иметь столбец с раскрывающимся списком, в который может вводить пользователь?

Ответы [ 3 ]

4 голосов
/ 14 октября 2008
void dataGridView1_EditingControlShowing(object sender, 
    DataGridViewEditingControlShowingEventArgs e)
{
    if (e.Control.GetType() == typeof(DataGridViewComboBoxEditingControl))
    {
        DataGridViewComboBoxEditingControl cbo = 
            e.Control as DataGridViewComboBoxEditingControl;
        cbo.DropDownStyle = ComboBoxStyle.DropDown;
    }
}

Проблема с комбинированным списком и обзором данных с привязкой к данным

2 голосов
/ 15 октября 2008

Следующее решение работает для меня

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;
        }
    }
}
1 голос
/ 29 июля 2011
if (!Column1.Items.Contains(e.FormattedValue.ToString())) { 
    Column1.Items.Add(e.FormattedValue);     
    dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = e.FormattedValue; 
}  

всегда может возвращать true, потому что Column1.Items.Contains() ищет String значения. если e.FormattedValue не является String, то сравнение не удастся.

1008 * попробовать *

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; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...