我想知道如何解決/簡化一個任務,有時彈出與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顯示我的列表的內容。
但現在這裏的問題...我怎樣才能添加或刪除行? 逸岸:
如果我將焦點設置在一個行,我按「Delete」鍵,它不 工作。
如果我嘗試添加一個新行,當它失去焦點時,它突然消失。
顯然我失去了一些東西。不幸的是,我發現DevExpress文檔對此類論點和最佳實踐頗爲困惑(在我看來),所以我無法達到我的目標。
有人可以幫助我嗎?
PS。 This是我樣本的.csproj超鏈接。
非常感謝您的建議!我試過使用bindingList而不是簡單的列表類,它的工作原理...現在我可以添加主行(我的最新示例中的客戶行),但它沒有解決詳細信息(我最新示例中的訂單行)。顯然,詳細信息gridview直接綁定到列表而不是綁定列表的「訂單」屬性。 –
GiveEmTheBoot
2013-05-03 18:35:43
我如何解決沒有改變「訂單」屬性從列表到BindingList的類型?我不想在我的模型層中使用面向綁定的類型,也不想重新編譯我所有的業務邏輯模型容器程序集,因爲它們太多了......是否有任何解決方法或方法來包裝我的模型使其完全可編輯並將其用作gridcontrol的數據源?謝謝! – GiveEmTheBoot 2013-05-03 18:38:45
沒有我知道的。在最高級別上,您的選項是1)使用實現IBindingList接口的容器,2)將控件綁定到數據庫,或3)通過DataSet類綁定到XML數據。有關更多信息,請參閱http://documentation.devexpress.com/#WindowsForms/CustomDocument2395。 – kenrogers 2013-05-03 18:54:23