2

我对 C# 还是有点陌生​​,但我使用的是 Winforms,并且我有一个 DataGridView,它连接到数据源并且被正确填充。

我还在运行时添加了一个 ComboBoxColumn。此 ComboBoxColumn 连接到数据源,设置了 displaymember 和 valuemember,设置了 headertext,然后将列添加到数据网格中。连接工作得很好,当用户单击组合框时,按预期填充。

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

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

我知道在普通的组合框控件中,我应该只设置 .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
        }
    }

这只是显示下拉的数据连接。显然,有许多方法与大量代码一起使用。但这不是问题,因为它工作正常。我不知道如何解决将先前选择的项目实际显示为组合框文本的问题?

4

1 回答 1

2

听起来您正在寻找的DataPropertyNameComboBoxColumn. 此属性在DataSourceDataGridView和 的选定值之间创建绑定ComboBoxColumn

例如,假设您有一个产品列表显示在组合框中。然后,您的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自定义代码内的所有这些保存和值设置。

要设置 a 的选定值,DataGridViewComboBoxCell您只需选择单元格,然后设置其Value属性。

dataGridView1.Rows["rowname"].Cells["columnname"].Value = valueFromDb;
于 2011-07-17T09:02:40.837 回答