Если вы хотите отобразить что-то отличное от значений, которые должны содержать ячейки, то вы не можете просто загрузить одну вещь в элементы ComboBoxCells.
Вместо этого вам нужен DataSource, который имеет по крайней мере, различные поля для двух вещей, которые вы хотите использовать:
- Поле для видимого представления данных, называемых
DisplayMember
- и поле для фактические данные, называемых
ValueMember
этих поля могут сидеть в DataTable
, но вы также можете использовать любую другую коллекцию с подходящими свойствами.
Позволяет создать очень простой класс и есть список этого класса:
class itemClass
{
public string display { get; set;}
public string value { get; set; }
public itemClass(string d, string v)
{ display = d; value = v;}
}
List<itemClass> myItems = new List<itemClass>();
private void loadButton_Click(object sender, EventArgs e)
{
// load the list with all values:
myItems.Add(new itemClass("zero", "0"));
myItems.Add(new itemClass("one", "1"));
myItems.Add(new itemClass("two", "2"));
myItems.Add(new itemClass("three", "3"));
myItems.Add(new itemClass("four", "4"));
myItems.Add(new itemClass("five", "5"));
myItems.Add(new itemClass("six", "6"));
// prepare the DataGridView 'DGV':
DGV.Columns.Clear();
DataGridViewComboBoxCell cCell = new DataGridViewComboBoxCell();
DataGridViewComboBoxColumn cCol = new DataGridViewComboBoxColumn();
DGV.Columns.Add(cCol);
cCol.DisplayMember = "display";
cCol.ValueMember = "value";
cCol.DataSource = myItems;
cCol.ValueType = typeof(string);
// add a few rows, for testing:
DGV.Rows.Add(7);
for (int i = 0; i < DGV.Rows.Count;
i++) DGV.Rows[i].Cells[0].Value = i + "";
}
В примере я загружаю Items
вручную. Обычно вам нужно вытащить значения из базы данных или другого источника. Вы можете сделать это либо путем загрузки списка источников данных, как указано выше, либо вы можете получить таблицу поиска независимо или в DataSet
.
Если все ячейки должны иметь индивидуальные значения поиска, вам необходимо загрузить их отдельно, а не использовать столбец, но каждая из ячеек будет передана в DataGridViewComboBoxCell
.
Ваш вопрос довольно неполный. Я должен угадать: если значение столбца установлено, то соответствующий элемент из DropDown отображается автоматически. Если это не так, нет совпадения. Действительно ли 0,1,2 действительно ваши значения CR_STATE_S? – TaW
Да, состояние CR может быть 0, 1 или 2, и когда значение столбца установлено, отображается значение соответствия, возвращаемое GetStateName – user315561
OK. Теперь, каков ваш вопрос? Обратите внимание, что поле со списком отображается только тогда, когда оно выпало; когда он закрыт, то, что вы видите, является столбец. (Это отличается от ComboBox, который также всегда имеет видимую часть текста.) – TaW