当winform属性网格的数据源包含一个集合时,它会弹出一个新窗口,我想在弹出窗口时使用自己的winform。
例如:
Class User{ int ID ;int Name; list<order> CustomerOrder;}
,当弹出订单页面时,我希望它可以从存在的订单列表中选择订单,其中添加项目时来自另一个数据源。
这可能是真的吗?或开源扩展控制或第三控制?
答案 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;
}
}