我有一个数据表,一列是另一个数据库表的整数ID外键。
我有一个datagridview,我想使用组合框列来允许用户更改值。但是不使用整数,使用名称会很棒。
我尝试使用公共成员int ID和string Name创建一个简单的结构;一本字典并查看了枚举(但是在编译时未知的值)但还没有任何工作。
我能够使用struct值填充组合框,但无法以编程方式设置所选项/索引;即,如果ID“5”在数据表中,则将组合框选定项设置为ID为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”。根据gridview数据源的FK id,每个选定的项应匹配。
答案 0 :(得分:9)
您可以设置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";
答案 1 :(得分:0)
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);