Основной причиной вашей проблемы является то, что значение «Выбрать» не существует в вашем списке значений поля со списком.Вам нужно будет либо добавить это к источнику данных для столбца, либо к источнику данных для поля со списком отдельной ячейки (используя элемент управления для редактирования этой ячейки).
Ниже приведено более подробное объяснение установки значения выбранного элемента, которое я собираюсь оставить, поскольку вы можете найти его полезным.
Существует два основных способа установить значение параметра.DataGridViewComboBoxColumn.Вы либо используете привязку данных, либо устанавливаете значение напрямую.
Звучит так, будто вы пытаетесь установить напрямую, поэтому сначала я объясню это, а затем ниже я дополню ответ привязкой данных.
Взяв следующий надуманный пример:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
BindingList<User> users = new BindingList<User> { new User() { UserName = "Fred", userid = 2 } };
IList<MyValue> values = new List<MyValue> { new MyValue{id = 1, name="Fred"}, new MyValue{id = 2, name="Tom"}};
dataGridView1.DataSource = users;
DataGridViewComboBoxColumn col = new DataGridViewComboBoxColumn();
col.DataSource = values;
col.DisplayMember = "name";
col.DataPropertyName = "userid";
col.ValueMember = "id";
dataGridView1.Columns.Add(col);
}
}
public class MyValue
{
public int id { get; set; }
public string name { get; set; }
}
public class User
{
public string UserName { get; set; }
public int userid {get;set;}
}
В этом примере я установил для свойства ValueMember
значение "id", которое ссылается на идентификатор имен свойств в списке, к которому привязан мой ComboBox.
Итак, все, что мне нужно сделать, это следующее (где я уверен, что мои индексы строк и ячеек правильны - вы должны написать код, чтобы проверить это):
dataGridView1.Rows[0].Cells[2].Value = 1;
Теперь, вВ моем примере это работает, потому что мой ValueMember
установлен на мое свойство "id", которое является целым числом, если бы вместо id было свойство строки, мне нужно было бы установить значение следующим образом:
dataGridView1.Rows[0].Cells[2].Value = "1";
(на самом деле простопопробовал это, и он справляется с неявным приведением)
И, конечно, я хотел бы убедиться, что в моем списке действительно есть значение "1".
выше несколько строк являются прямой причиной вашегоошибка - ваш список, который предоставляет значения в поле со списком, не содержит значения «Выбрать».
Чтобы установить значение с помощью привязки данных, вам нужно сообщить ComboBoxColumn, с чем оно связывается вDataGridView источник данных.
Я сделал, установив DataPropertyName объекта ComboBoxColumn в имя свойства класса, с которым связан DataGridView.