如何更改动态添加的DataGridViewComboBoxColumn的comboBox单元格的文本?

时间:2011-07-16 22:42:46

标签: c# winforms datagridview datagridviewcombobox

我仍然是C#的新手,但我使用的是Winforms,我有一个DataGridView,它连接到数据源并正在正确填充。

我还在运行时添加了一个ComboBoxColumn。此ComboBoxColumn连接到数据源,设置了displaymember和valuemember,设置了headertext,然后将列添加到datagrid。连接工作正常,当用户单击comboBox时,将按预期填充。

当用户在网格中完成一个新行时,他显然会选择comboBox中的项目,然后在完成后整行更新到我的数据库。

我的问题是:当再次打开或重新绘制此数据网格时,由于数据源属性而填充它,但是如何让comboBox单元格显示他最初选择的VALUE而不仅仅是空白框。我知道从DB获取值并输入值的代码。理想的情况是,如果我可以将该变量放在comboBox的显示中。请记住,comboBox仍然是数据绑定的,以便用户可以根据需要编辑值?

我知道在普通的comboBox控件中我应该设置.Text属性。但是DataGridViewComboBox没有相同的属性。

以下是实际数据连接和添加comboBoxColumn的代码:

    public void AddComboBoxColumn(DataGridView datagridName, DataTable table, string headerText, int columnIndex)
    {
        DataGridViewComboBoxColumn column = new DataGridViewComboBoxColumn();

        GetDisplayAndValueMembers(table, headerText); //Calls method that gets the datasource, displaymember, valuemember depending on column

        column.DataSource = tableRef; //sets datasource to table referenced by column
        column.DisplayMember = displayMember; //sets displaymember
        column.ValueMember = valueMember; //sets valuemember

        column.HeaderText = headerText; //changes headertext to displayed text

        if (newColumnIndex == 0)
            datagridName.Columns.Add(column); //added to end of datagrid
        else
        {
            datagridName.Columns.RemoveAt(columnIndex);
            datagridName.Columns.Insert(newColumnIndex, column); //added in specific index if needed
        }
    }

这只是显示下拉列表的数据连接。显然,有许多方法与大量代码一起使用。但这不是问题,因为这很好。我不知道如何解决实际显示以前选中的项目作为comboBox文本的问题?

1 个答案:

答案 0 :(得分:2)

听起来你正在寻找的是DataPropertyName的{​​{1}}属性。此属性创建ComboBoxColumn的{​​{1}}与DataSource的所选值之间的绑定。

例如,假设您在组合框中显示了产品列表。然后,您的DataGridView ComboBoxColumn中也会有一个ProductId。像这样:

DataGridView

使用DataSource设置,您现在将在// There Orders is a data table coming from the db which includes the product id column dataGridView1.DataSource = Orders; // You set up your column just the same, with the DisplayMember and ValueMember DataGridViewComboBoxColumn column = new DataGridViewComboBoxColumn(); GetDisplayAndValueMembers(table, headerText); column.DataSource = tableRef; //sets datasource to table referenced by column column.DisplayMember = displayMember; //sets displaymember column.ValueMember = valueMember; //sets valuemember column.HeaderText = headerText; //changes headertext to displayed text //Now you also set the DataPropertyName column.DataPropertyName = "ProductId"; // this is the name of a column or property from the grid datasource dataGridView1.Columns.Add(column); DataPropertyName之间进行数据绑定。

如果基础数据源绝对不能包含组合框属性的值,那么您需要在自定义代码中处理ComboBoxColumn的所有保存和值设置。

要设置DataGridView的所选值,您只需选择单元格,然后设置其ComboBoxColumn属性。

DataGridViewComboBoxCell