C # datagridview комбинированный список данных столбца источник из списка / словарь / datatable - PullRequest
4 голосов
/ 31 октября 2011

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

У меня есть сетка данных, и я хотел бы использовать столбец со списком, чтобы позволить пользователю изменять значение.Но вместо использования целых чисел было бы здорово использовать имена.

Я попытался создать простую структуру с открытыми членами int ID и строкой Name;словарь и просматривал перечисления (однако значения не известны во время компиляции), но пока не получил ничего для работы.

Я смог заполнить комбинированный список значениями структуры, но не смог программно установить выбранный элементиндекс;то есть, если идентификатор «5» находится в таблице данных, установите выбранный элемент комбинированного поля на структуру с идентификатором 5.

Так что, чтобы было ясно, я хочу:

gridview datasource's fk ID's 
1
2
3

Foreign Key table:

ID   Name 
1    Name 1
2    Name 2
3    Name 3

Столбец Datagridviewcombobox должен быть загружен тремя элементами;должно отображаться как «Имя 1, Имя 2, Имя 3».На основе идентификатора FK источника данных gridview выбранный элемент для каждого должен совпадать.

Ответы [ 2 ]

9 голосов
/ 31 октября 2011

Можно установить свойство DataGridViewComboBoxColumn.DataSource, а затем использовать свойства ValueMember и DisplayMember, чтобы определить, что отображается в ComboBox.Проще всего загрузить значения FK в DataTable и использовать их в качестве источника данных.Например:

// assuming your DataGridViewComboBox column is fkCol
// and your fk values are in a DataTable called fkTable
fkCol.DataSource = fkTable;
fkCol.ValueMember = "ID";
fkCol.DisplayMember = "Name";

Я не уверен, как вы привязываете DataGridView к исходному DataTable, но вы можете связать столбец DataGridViewComboBox с конкретным столбцом в исходном DataTable используя DataPropertyName:

fkCol.DataPropertyName = "ColumnName";
0 голосов
/ 31 декабря 2014
    DataAccessLayer dal = new DataAccessLayer();
    DataTable movies = dal.GetMovies();

    gvMovies.DataSource = movies;
    gvMovies.AllowUserToAddRows = false;
    gvMovies.AllowUserToDeleteRows = false;

    //Create the new combobox column and set it's DataSource to a DataTable
    DataGridViewComboBoxColumn col = new DataGridViewComboBoxColumn();
    col.DataSource = dal.GetMovieTypes(); ; 
    col.ValueMember = "MovieTypeID";
    col.DisplayMember = "MovieType";
    col.DataPropertyName = "MovieTypeID";

    //Add your new combobox column to the gridview
    gvMovies.Columns.Add(col);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...