组合框的随机单元格属性

本文关键字:单元格 属性 随机 组合 | 更新日期: 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

我很确定那是不可能的。