组合框的随机单元格属性
本文关键字:单元格 属性 随机 组合 | 更新日期: 2023-09-27 18:18:09
我使用dataGridView。数据源= myList;来填充dataGridView。
我使用下面的代码来隐藏类成员:
[System.ComponentModel.Browsable(false)]
public string SomeInformation { get; set; }
但是,是否也有一种方法说类成员应该表示为一个组合框?
如果没有,有没有办法用代码改变它?我尝试了以下操作:
DataGridViewComboBoxCell comboBoxCell = new DataGridViewComboBoxCell();
comboBoxCell.DataSource = State.Instance.ProductCategories.ToList();
dataGridView[2, 0] = comboBoxCell;
dataGridView[2, 0].Value = State.Instance.ProductCategories.ToList()[0];
字段的值将是好的,但仍然没有ComboBox。
帮忙吗?
编辑:我现在使用下面的代码:
dataGridView.DataSource = State.Instance.Products;
dataGridView.DataError += delegate(object o, DataGridViewDataErrorEventArgs args)
{
MessageBox.Show(args.Exception.Message);
};
DataGridViewComboBoxColumn col = new DataGridViewComboBoxColumn();
col.DataPropertyName = "Categorie";
col.Name = "Categorie";
col.Visible = true;
col.HeaderText = "Categorie";
col.DataSource = State.Instance.ProductCategories.ToList();
col.DisplayMember = "Name";
col.DisplayIndex = 1;
dataGridView.Columns.Add(col);
dataGridView.CellEndEdit += delegate(object o, DataGridViewCellEventArgs args)
{
State.Instance.Save();
// If I check the value here, it is a string.
};
但是当我保存状态时,值没有被改变。可能是因为我自己添加了列,它不知道保存在哪里?
[System.ComponentModel.Browsable(false)]
public ProductCategory Categorie { get; set; }
在cellenddit事件中,我只得到字符串,而不是整个对象
可以设置DataGridView。autogeneratecolns =false然后在代码中添加所有列,或者自动生成列,然后添加您的自定义列(更改DisplayIndex以设置其位置):
DataGridViewComboBoxColumn col = new DataGridViewComboBoxColumn();
col.DataPropertyName = "SomeInformation";
col.Name = "colSomeInformation";
col.Visible = true;
col.HeaderText = "Some Information"
col.DataSource = State.Instance.ProductCategories.ToList();
// set other column properties here...
dataGridView.Columns.Add(col);
我曾经必须根据外部设置自动生成不同类型的datagridview列,我使用xml配置文件。据我所知,没有内置的解决方案来做到这一点。
编辑:ValueMember如何工作:
class ProductCategory
{
public int ID {get;set;}
public string Name {get;set;}
}
class Product
{
public int ID {get;set;}
public string Name {get;set;}
public int CategoryID {get;set;}
}
// Example data binding:
BindingList<Products> bl = new BindingList<Products>(State.Instance.Products.ToList());
BindingSource bs = new BindingSource();
bs.DataSource=bl;
dataGridView.DataSource = bs;
DataGridViewComboBoxColumn col = new DataGridViewComboBoxColumn();
col.DataSource = State.Instance.Categories.ToList();
col.DataPropertyName = "CategoryID";
col.DisplayMember= "Name"; // name of category
col.ValueMember ="ID"; // id of category
我很确定那是不可能的。