相关疑难解决方法(0)

数据绑定动态数据

我有一组"动态数据",我需要绑定到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)

c# data-binding winforms

28
推荐指数
1
解决办法
2万
查看次数

如何在属性网格中显示动态对象?

我有一个自定义对象类型,必须在以下内容中进行编辑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仅在运行时已知. …

c# propertygrid winforms

4
推荐指数
1
解决办法
2万
查看次数

在运行时生成的属性(PropertyGrid.SelectedObject)

好的,这是一个艰难的.

简介:我的想法是连接我写了一个实例化的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的.

所以这导致了三个问题:

  1. 难道这由QueryBuilder的类的类型莫名其妙压倒一切的GetProperties()来完成,如果是,它是如何做得最好?

  2. 然后我如何在运行时生成QBField属性并在实例化时迭代所有这些?想法:PropertyDescriptors和Activators?

  3. 如何迭代所有这些属性来读取每个QBField对象的值?我遇到的问题是,当用反射读取QBField的属性并尝试getValue(obj,null)时,当然需要的第一个参数是一个对象,我不知道,因为我有很多这些QBField对象.也许把我所有的QBField都放进去List<QBField>并迭代它?这会在这个例子中起作用吗?

我只是有点迷失,但我觉得我非常接近解决方案.因此,非常感谢任何帮助或只是指向正确的方向!

c# reflection propertygrid properties

3
推荐指数
1
解决办法
3689
查看次数