我有一组"动态数据",我需要绑定到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) 我有一个自定义对象类型,必须在以下内容中进行编辑PropertyGrid:
public class CustomObjectType
{
public string Name { get; set; }
public List<CustomProperty> Properties {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
其中包含自定义属性列表:
public class CustomProperty
{
public string Name { get; set; }
public string Desc { get; set; }
public Object DefaultValue { get; set; }
Type type;
public Type Type
{
get
{
return type;
}
set
{
type = value;
DefaultValue = Activator.CreateInstance(value);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这里的主要问题是PropertyGrid控件不允许编辑,也不使用适当的编辑工具来DefaultValue预先通过设置CustomProperty's字段的值来实例化的属性Type.
类型DefaultValue仅在运行时已知. …
好的,这是一个艰难的.
简介:我的想法是连接我写了一个实例化的QueryBuilder类,到PropertyGrid中.QueryBuilder类现在包含几个字段,这些字段是硬编码的,如下例所示.因此,允许用户指定,哪些字段应该以何种方式(排序,分组等)的查询使用.在用户为这些属性指定了所有设置后(通过代码或通过PropertyGrid GUI),QueryBuilder能够生成查询.一切都很好.伪代码:
class QueryBuilder {
public QBField name {get; set;}
public QBField prename {get; set;}
public QBField zip {get; set;}
// ...
public void QueryBuilder() {
name = new QBField();
prename = new QBField();
// ...
}
public getQuery() {
// logic to build the query
}
}
class QBField {
public bool shown {get; set;}
public bool sortby {get; set;}
public bool groupby {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
挑战:现在不是硬编码的每个字段作为QueryBuilder的类公共属性,我不知道我怎么会用即List<string>包含所有我的领域"填充"具有这些属性我实例化QueryBuilder的.
所以这导致了三个问题:
难道这由QueryBuilder的类的类型莫名其妙压倒一切的GetProperties()来完成,如果是,它是如何做得最好?
然后我如何在运行时生成QBField属性并在实例化时迭代所有这些?想法:PropertyDescriptors和Activators?
如何迭代所有这些属性来读取每个QBField对象的值?我遇到的问题是,当用反射读取QBField的属性并尝试getValue(obj,null)时,当然需要的第一个参数是一个对象,我不知道,因为我有很多这些QBField对象.也许把我所有的QBField都放进去List<QBField>并迭代它?这会在这个例子中起作用吗?
我只是有点迷失,但我觉得我非常接近解决方案.因此,非常感谢任何帮助或只是指向正确的方向!