我想知道如何解决/简化在DevExpress XtraGrid套件开发过程中有时弹出的任务。 有时我会陷入这种情况: 给定这两个类,它们代表来自业务逻辑层的模型类:
public class Customer
{
public Int32 CustomerId { get; set; }
public String Name { get; set; }
public String Address { get; set; }
public List<Order> Orders { get; set; }
}
public class Order
{
public Int32 OrderId { get; set; }
public String ItemCode { get; set; }
public Int32 Quantity { get; set; }
public Decimal Price { get; set; }
public DateTime Date { get; set; }
}
我想创建一个简单的窗口,显示一个允许编辑/添加/删除客户列表及其嵌套订单的XtraGrid。 为了做到这一点,我创建了一个带有GridControl和GridView控件的简单表单,其中AllowAddRow和AllowDeleteRow属性== true。 然后,在Form1类中,我完成了以下操作:
//List of my customers
private List<Customer> _customers;
public Form1()
{
//Initialize UI components
InitializeComponent();
//Call the provider in order to get customers
CustomerProvider cp = new CustomerProvider();
_customers = cp.GetCustomers();
//Initialize bindingSource
BindingSource bs = new BindingSource();
bs.DataSource = _customers;
//Set GridControl's dataSource
gridControl1.DataSource = bs;
}
现在我有了漂亮的GridControl来显示我的List的内容。
但现在问题是......我怎样才能添加或删除行? INFACT:
如果我将焦点设置在一行上并按“删除”键,则不会 工作
如果我尝试添加新行,当它失去焦点时,会突然消失。
显然我错过了一些东西。不幸的是,我发现DevExpress文档非常混淆(在我看来)关于这种论点和最佳实践,所以我无法实现我的目标。
有人可以帮助我吗?
PS。 This是我的示例的.csproj的超链接。
答案 0 :(得分:1)
将gridControl1.UseEmbeddedNavigator属性设置为true。您将在视图底部获得数据导航器小部件。
然而,那只会让你到达中途。如果您希望能够从网格向客户添加订单,则客户类需要使用BindingList
而不是List
作为订单属性。
有关详细信息,请参阅here。如果您发现文档不足,您还可以在Support Center找到有用的资源。
编辑:要考虑的其他一些选项是:
DataSet
。如果您已经将数据存储在数据库中,那么选项1就是可行的方法。如果你还没有在任何地方保存你的数据,你可以采取任何一种方式。