我有一组"动态数据",我需要绑定到GridControl.到目前为止,我一直在使用标准的DataTable类,它是System.Data命名空间的一部分.这工作得很好,但我被告知我不能使用它,因为它对于客户端和服务器之间的网络序列化太重了.
所以我认为我可以通过简单地使用List<Dictionary<string, object>>List表示行集合的类型来轻松复制DataTable类的"简化"版本,并且每个Dictionary表示一行,其中列名称和值为KeyValuePair类型.我可以设置Grid以使列DataField属性与Dictionary中的键匹配(就像我为DataTable的列名所做的那样).
但是做完之后
gridControl.DataSource = table;
gridControl.RefreshDataSource();
Run Code Online (Sandbox Code Playgroud)
网格没有数据......
我想我需要实施IEnumerator- 对此的任何帮助都将不胜感激!
示例调用代码如下所示:
var table = new List<Dictionary<string,object>>();
var row = new Dictionary<string, object>
{
{"Field1", "Data1"},
{"Field2", "Data2"},
{"Field3", "Data3"}
};
table.Add(row);
gridControl1.DataSource = table;
gridControl1.RefreshDataSource();
Run Code Online (Sandbox Code Playgroud) 据我所知,属性网格被赋予了一个对象,它可以通过使用反射提取其属性来操作.
我的问题是我有一组在运行时确定的参数,因此我不能静态地组成一个具有属性的类来表示这个集合.
我有两个想法来解决这个问题,但两者都很复杂,可能会花费很多时间,事实上我会说它们在我的时间限制下不实用.一种是使用Reflection Emit来动态定义一个类,另一种是动态构建一个C#源文件,然后使用CodeDom进行编译.
可以使用属性网格以不同的方式运行(除了使用反射提取对象的属性),这可以解决我的问题吗?
如果不知道有什么其他控制可以为我做这项工作吗?
我想说,我从一开始就进入属性网格的原因是它能够为常见类型提供真正好的数据检索UI.对于颜色,你可以自动获取一个调色板,对于dataTime,你会自动拥有一个漂亮的日历.如果可能的话,我想自动获取这些东西.