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

时间:2011-10-31 03:09:31

标签: c# winforms datagridview combobox

我有一个数据表,一列是另一个数据库表的整数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,每个选定的项应匹配。

2 个答案:

答案 0 :(得分:9)

您可以设置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,但您可以将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);