Я просто не могу заставить это работать. У меня есть datagridview в winforms, и в этом одном из моих столбцов находится DataGridViewComboBoxColumn.
В своем конструкторе я настроил его так
DataGridViewComboBoxColumn column = (DataGridViewComboBoxColumn)RectangleGrid.Columns["Material"];
DataTable data = new DataTable();
data.Columns.Add(new DataColumn("Value", typeof(int)));
data.Columns.Add(new DataColumn("Description", typeof(string)));
foreach (Materials M in DataStructure.Active.Active_Materials)
{
data.Rows.Add(M.MaterialNr, (M.MaterialNr + 1).ToString() + " " + M.Material.Name);
}
column.DataSource = data;
column.ValueMember = "Value";
column.DisplayMember = "Description";
И это действительно хорошо работает, за исключением того, что в раскрывающемся списке ничего не выбрано, что мне нужно. Я искал это в Google и, например, пробовал этот подход: http://goo.gl/kBy8W, но безуспешно, потому что EditingControlShowing происходит только тогда, когда я щелкаю поле, а не когда оно появляется впервые (поэтому я могу установить выбранный индекс после его нажатия, но это бесполезно). Версия CellFormatting по крайней мере изменяет значение, но просто помещает туда строку, а не мой первый индекс из моего источника данных.
Я тоже пробовал это
column.DefaultCellStyle.NullValue = data.Rows[0]["Description"];
column.DefaultCellStyle.DataSourceNullValue = data.Rows[0]["Value"];
и это, казалось, сработало, но затем, когда я выбрал первый индекс в раскрывающемся списке (так что опустите раскрывающийся список, а затем выберите первый индекс, а затем удалите ячейку), я получил сообщение об ошибке от ParseFormattedValue, где говорится, что он не может преобразовать "значение" в system.String.
Было это, казалось, на правильном пути, но я не мог заставить его работать: http://goo.gl/VevA3