如何在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
我们能够做到这一点的唯一方法是使用第三方网格控件,该控件允许我们在运行时定义列并逐行填充这些列中的值。我还没有在标准网格中尝试过,但希望同样的原则适用。
基本上,运行时的进程是:
1)使用固定属性添加标准列,并将其绑定到底层属性。
2)添加显示动态属性所需的列,但不绑定它们
3)显示时,对于每一行,将底层记录的内容移动到该行。
4)保存时,对于每一行,将该行的内容移回记录。
虽然这听起来像很多工作,但一旦你弄清楚了,它就很容易了。