2013-04-30 53 views
2

我想知道如何解決/簡化一個任務,有時彈出與DevExpress XtraGrid套件的開發過程中。 有時我陷入這種情況下: 鑑於這些2類,代表了來自業務邏輯層的模型類: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和一個帶有AllowAddRow和AllowDeleteRow屬性的GridView控件創建了一個簡單的表單== 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顯示我的列表的內容。

enter image description here

但現在這裏的問題...我怎樣才能添加或刪除行? 逸岸:

  • 如果我將焦點設置在一個行,我按「Delete」鍵,它不 工作。

  • 如果我嘗試添加一個新行,當它失去焦點時,它突然消失。

顯然我失去了一些東西。不幸的是,我發現DevExpress文檔對此類論點和最佳實踐頗爲困惑(在我看來),所以我無法達到我的目標。

有人可以幫助我嗎?

PS。 This是我樣本的.csproj超鏈接。

回答

1

將gridControl1.UseEmbeddedNavigator屬性設置爲true。您將在視圖底部獲得數據導航器小部件。

但是,這隻會讓你一半在那裏。如果您希望能夠從網格向客戶添加訂單,則您的客戶類需要使用BindingList而不是List作爲訂單屬性。

請參閱here瞭解更多信息。如果您發現缺少文檔,您還可以在Support Center找到有用的資源。

編輯:一些其他的選擇要考慮的是:

  1. 綁定網格到數據庫。
  2. 綁定到XML數據並使用DataSet

如果您已經將您的數據存儲在數據庫中,那麼選項1就是要走的路。如果你還沒有在任何地方堅持你的數據,你可以採取任何方式。

+0

非常感謝您的建議!我試過使用bindingList而不是簡單的列表類,它的工作原理...現在我可以添加主行(我的最新示例中的客戶行),但它沒有解決詳細信息(我最新示例中的訂單行)。顯然,詳細信息gridview直接綁定到列表而不是綁定列表的「訂單」屬性。 – GiveEmTheBoot 2013-05-03 18:35:43

+0

我如何解決沒有改變「訂單」屬性從列表到BindingList的類型?我不想在我的模型層中使用面向綁定的類型,也不想重新編譯我所有的業務邏輯模型容器程序集,因爲它們太多了......是否有任何解決方法或方法來包裝我的模型使其完全可編輯並將其用作gridcontrol的數據源?謝謝! – GiveEmTheBoot 2013-05-03 18:38:45

+0

沒有我知道的。在最高級別上,您的選項是1)使用實現IBindingList接口的容器,2)將控件綁定到數據庫,或3)通過DataSet類綁定到XML數據。有關更多信息,請參閱http://documentation.devexpress.com/#WindowsForms/CustomDocument2395。 – kenrogers 2013-05-03 18:54:23