![](/img/trans.png)
[英]C#: DataGridView DataSource Update - DataTable, List, BindingList and BindingSource?
[英]C# datagridview combobox column datasource from list/dictionary/datatable
我有一个数据表,一列是另一个数据库表的整数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,每个选定的项应该匹配。
您可以设置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
,但您可以使用DataPropertyName
将DataGridViewComboBox
列与原始DataTable
的特定列相关联:
fkCol.DataPropertyName = "ColumnName";
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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.