在winform propertygrid控件中替换集合窗口

时间:2012-12-10 17:30:52

标签: c# propertygrid

当winform属性网格的数据源包含一个集合时,它会弹出一个新窗口,我想在弹出窗口时使用自己的winform。

例如: Class User{ int ID ;int Name; list<order> CustomerOrder;},当弹出订单页面时,我希望它可以从存在的订单列表中选择订单,其中添加项目时来自另一个数据源。

这可能是真的吗?或开源扩展控制或第三控制?

1 个答案:

答案 0 :(得分:1)

如果您创建一个包装列表或订单的新类型,您可以在新类型上设置编辑器属性,然后您可以弹出任何类型的winform。

例如,使用这样的类包装List:

[Editor(typeof(OrderListEditor), typeof(UITypeEditor))]
class OrderList
{
    public OrderList() { Orders = new List<order>(); }
    public List<order> Orders { get; set; }
}

并拥有用户类的属性:

class User
{
...
    public OrderList CustomerOrder { get; }
}

然后,当用户按下PropertyGrid中的“...”按钮时,您所要做的就是编写逻辑以执行您想要的操作:

class OrderListEditor : UITypeEditor
{
    public override System.Drawing.Design.UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
    {
        return System.Drawing.Design.UITypeEditorEditStyle.Modal;
    }

    public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
    {
        OrderList list = (OrderList)value;

        Console.WriteLine("There are " + list.Orders.Count + " orders");
        return list;
    }
}