关于c#:如何将datagridview的数据源属性绑定到组合框?

How to bind datagridview's data source property to combobox?

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

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

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

getresults(id)将返回list和myclass,其中

1
2
3
4
5
Class myClass
{
 int productID{ set; get; }
 int price{ set; get; }
}

然后我在数据网格视图上签了这样的首字母:

2

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

1
2
3
4
5
Class Products
{
 int ID;
 string Name;
}

在这里,我期望数据网格从MyClass获取productID并将其传递到每行的组合框中,然后组合框获取productID与products列中的ID匹配,然后显示它的name属性。

当我运行此命令时,我得到一个错误,即DataGridViewComboBoxCell值无效。


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

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

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

在DataGrid自动生成列事件中:

1
2
3
4
5
6
7
8
9
10
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";
}