0

当其数据源包含集合时,winform propertygrid 将弹出一个新窗口,我想在弹出窗口时使用我自己的 winform。

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

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

4

1 回答 1

1

如果你创建一个新类型来包装你的列表或订单,你可以在你的新类型上设置 Editor 属性,然后你可以弹出你想要的任何类型的 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;
    }
}
于 2012-12-11T23:17:40.387 回答