XtraGrid绑定复杂和嵌套对象模型

时间:2013-04-30 21:19:16

标签: binding devexpress entity xtragrid custom-object

我想知道如何解决/简化在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的内容。

enter image description here

但现在问题是......我怎样才能添加或删除行? INFACT:

  • 如果我将焦点设置在一行上并按“删除”键,则不会 工作

  • 如果我尝试添加新行,当它失去焦点时,会突然消失。

显然我错过了一些东西。不幸的是,我发现DevExpress文档非常混淆(在我看来)关于这种论点和最佳实践,所以我无法实现我的目标。

有人可以帮助我吗?

PS。 This是我的示例的.csproj的超链接。

1 个答案:

答案 0 :(得分:1)

将gridControl1.UseEmbeddedNavigator属性设置为true。您将在视图底部获得数据导航器小部件。

然而,那只会让你到达中途。如果您希望能够从网格向客户添加订单,则客户类需要使用BindingList而不是List作为订单属性。

有关详细信息,请参阅here。如果您发现文档不足,您还可以在Support Center找到有用的资源。

编辑:要考虑的其他一些选项是:

  1. 将网格绑定到数据库。
  2. 绑定到XML数据并使用DataSet
  3. 如果您已经将数据存储在数据库中,那么选项1就是可行的方法。如果你还没有在任何地方保存你的数据,你可以采取任何一种方式。