如何在gridview中显示c#中的固定字段和动态列表

本文关键字:字段 列表 动态 gridview 显示 | 更新日期: 2023-09-27 18:16:23

让我们有这些类:

public class MyObject
{
  //constructor and other stuff
  public bool MyBool { get; set; }
  public string MyString { get; set; }
  public double MyDouble { get; set; }
  ...
  public List<MyProperty> Properties { get; set; }
}
public class MyProperty
{
  //constructor and other stuff
  public Type TheType { get; set; }
  public String Name { get; set; }
  public Object Value { get; set; }
}

在表单中,我将填充值:

MyObject myObject = new MyObject(true, "Foo", 12);
MyObject myObject2 = new MyObject(false, "Bar", 16);
myObject.Properties.Add(new MyProperty(typeof(double),"Amount",2000));
myObject.Properties.Add(new MyProperty(typeof(string),"Name","Ale"));
//in the same order, with the same type and name
//only the values are different
myObject2.Properties.Add(new MyProperty(typeof(double),"Amount",3000));
myObject2.Properties.Add(new MyProperty(typeof(string),"Name","Teru"));
List<MyObject> list = new List<MyObject>();
list.Add(myObject);
list.Add(myObject2);

现在,问题是:我如何在单个datagridview中显示固定字段和动态定义的属性?最终结果应该类似于:

MyBool | MyString | MyDouble | Amount | Name
true   |  Foo     |   12     |  2000  | Ale
false  |  Bar     |   16     |  3000  | Teru

如何在gridview中显示c#中的固定字段和动态列表

我们能够做到这一点的唯一方法是使用第三方网格控件,该控件允许我们在运行时定义列并逐行填充这些列中的值。我还没有在标准网格中尝试过,但希望同样的原则适用。

基本上,运行时的进程是:

1)使用固定属性添加标准列,并将其绑定到底层属性。

2)添加显示动态属性所需的列,但不绑定它们

3)显示时,对于每一行,将底层记录的内容移动到该行。

4)保存时,对于每一行,将该行的内容移回记录。

虽然这听起来像很多工作,但一旦你弄清楚了,它就很容易了。