首页 文章

如何将datagridview的数据源属性绑定到组合框?

提问于
浏览
-1

我试图将对象列表绑定为数据网格的数据源,列的组合应该是组合框,其中组合框的选定值应该是我对象中相关字段中的值 .

这是我如何设置gridview的数据源:

var s = new BindingSource();
s.DataSource = dbc.GetResults();
dataGridView.DataSource = s;

dbc.GetResults(id)将返回List和myClass

Class myClass
{
 int productID{ set; get; }
 int price{ set; get; }
}

然后我像这样初始化数据网格视图:

dataGridView.AutoGenerateColumns = false;
DataGridViewComboBoxColumn dgvc = new DataGridViewComboBoxColumn();
dgvc.HeaderText = "Products";
dgvc.DataSource = dbc.GetAllProducts();
dgvc.DisplayMember = "Name";
dgvc.ValueMember = "ID";
dataGridView.Columns.Add(dgvc);
dataGridView.Columns[0].DataPropertyName = "productID";

和dbc.GetAllProducts()返回列表和:

Class Products
{
 int ID;
 string Name; 
}

在这里,我希望数据网格从myClass获取productID并将其传递给每一行上的组合框,然后组合框获取productID与产品列中的ID匹配,然后显示它的Name属性 .

当我运行这个时,我得到DataGridViewComboBoxCell值无效的错误 .

1 回答

  • 2

    您应该使用字典将属性绑定到组合:

    private Dictionary<int, string> cbProductVals= new Dictionary<int, string>();
    

    使用产品对象填充字典并将其绑定到网格列上 .

    在您的datagrid AutoGeneratingColumn事件中:

    if (e.PropertyName == "productID")
    {
        DataGridComboBoxColumn cb = new DataGridComboBoxColumn();
        e.Column = cb;
        cb.ItemsSource = cbProductVals;
        cb.DisplayMemberPath = "Value";
        cb.SelectedValuePath = "Key";
        cb.SelectedValueBinding = new Binding("productID");
        e.Column.Header = "product price";
    }
    

相关问题