繁体   English   中英

来自list / dictionary / datatable的C#datagridview组合框列数据源

[英]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属性,然后使用ValueMemberDisplayMember属性来确定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 ,但您可以使用DataPropertyNameDataGridViewComboBox列与原始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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM