DataGridViewComboBoxColumn Выбранное значение/индекс

Я пытаюсь заполнить DataGridViewComboBoxColumn списком строк, а затем выбрать одну из них на основе их значения при загрузке формы.

Казалось бы, простая задача, но я просто не могу понять ее правильно.

Я заполняю DataGridViewComboBoxColumn строками как таковыми без проблем:

ComboBoxColumn.Items.AddRange("Mr.", "Ms.", "Mrs.", "Dr.");

Я также, кажется, могу без проблем добавить его в DataGridView (это неверно, см. Изменить):

ExampleDataGrid.Rows.Add("", ComboBoxColumn, 1000, "");

Теперь я хочу установить "Mr." выбираться при загрузке. Другие сообщения предполагают, что я должен просто использовать:

ExampleDataGrid.Rows[i].Cells["ExampleColumnName"].Value = "Mr.";

Но всякий раз, когда я его использую, я получаю сообщение об ошибке, которое говорит мне, что значение недействительно. Есть что-то, что мне не хватает?

Однако я могу использовать это, чтобы получить заданное значение без проблем:

string Title = ExampleDataGrid.Rows[i].Cells["ExampleColumnName"].Value;

Я просмотрел документацию, но, похоже, в ней не упоминается, как на самом деле использовать .Value в этом контексте. Microsoft Docs

Любые мысли о том, где я ошибаюсь, были бы замечательными.

Изменить:

Проблема, с которой я столкнулся, была вызвана тем, что я установил ComboBoxItems в "ExampleDataGrid.Rows.Add()". Это должно фактически содержать значение, которое вы хотите установить. например

ExampleDataGrid.Rows.Add("", "Mr.", 1000, "");

person tfcmad    schedule 05.12.2018    source источник
comment
Mr. в элементах списка имеет . в конце. Mr не существует в элементах, поэтому установка его в качестве значения ячейки со списком вызовет исключение.   -  person Reza Aghaei    schedule 05.12.2018
comment
Хорошее место, жаль, что это не решает проблему. Я получаю то же сообщение об ошибке Exception = {значение DataGridViewComboBoxCell недопустимо.}   -  person tfcmad    schedule 06.12.2018
comment
ты смотрел в отладчике? какого типа объект в ExampleDataGrid.Rows[i].Cells["ExampleColumnName"]   -  person Mong Zhu    schedule 06.12.2018
comment
Cells[ExampleColumnName] — это DataGridViewCellsCollection, но .Value отображается во время выполнения как DataGridViewComboBoxColumn.   -  person tfcmad    schedule 06.12.2018


Ответы (1)


Вы можете инициализировать DataGridView следующим образом:

private void Form1_Load(object sender, EventArgs e)
{
    var textBoxColumn = new DataGridViewTextBoxColumn();
    textBoxColumn.Name = "textBoxColumn";

    var comboBoxColumn = new DataGridViewComboBoxColumn();
    comboBoxColumn.Items.AddRange("A", "B", "C");
    comboBoxColumn.Name = "comboBoxColumn";

    dataGridView1.Columns.Add(textBoxColumn);
    dataGridView1.Columns.Add(comboBoxColumn);

    dataGridView1.Rows.Add("1", "A");
    dataGridView1.Rows.Add("2", "B");
}

А затем обновите значение comboBoxColumn для второй строки следующим образом:

private void button1_Click(object sender, EventArgs e)
{
    //You can use either of the following ways:
    dataGridView1[1, 1].Value = "C";
    //dataGridView1["comboBoxColumn", 1].Value = "C";
    //dataGridView1.Rows[1].Cells["comboBoxColumn"].Value = "C";
    //dataGridView1.Rows[1].Cells[1].Value = "C";
}

Значение, которое вы установили для ячейки, должно быть между значениями, которые вы добавили к Items из DataGridViewComboBoxColumn.

person Reza Aghaei    schedule 06.12.2018
comment
Однако в целом я предлагаю использовать привязку данных, а не несвязанный DataGridView. - person Reza Aghaei; 06.12.2018
comment
Спасибо за это, это хороший пример. Глядя на это, я считаю, что неправильно добавлял значения в поле со списком. ExampleDataGrid.Rows.Add(, ComboBoxColumn, 1000, ); Должно быть это например ExampleDataGrid.Rows.Add(, Mr. 1000, ); - person tfcmad; 06.12.2018