2013-04-30 1 views
2

DevExpress XtraGrid 제품군을 사용하여 개발 중에 때때로 팝업되는 작업을 해결하는 방법을 궁금합니다. 비즈니스 로직 계층에서 오는 모델 클래스 표현이이 개 클래스를 감안할 때 :복잡하고 중첩 된 객체 모델에 대한 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로 간단한 폼을 만들었습니다. 내 목록의 내용을 보여줍니다

//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 : 그런 다음, Form1 클래스에서 나는 다음과 같은 완료했습니다.

enter image description here

하지만 지금은 여기가 ... 문제 야 내가 어떻게 추가하거나 행을 삭제할 수 있습니까? Infact는 :

  • 내가 행에 포커스를 설정하고 난 누르면 키를, 그렇지 않은 작업을 수행 "삭제".

  • 새 행을 추가하려고하면 포커스가 없어지면 제대로 사라집니다.

분명히 나는 ​​뭔가를 놓치고 있습니다. 불행히도 나는 DevExpress 문서가 이런 종류의 논쟁과 모범 사례에 대해 (자신의 의견으로는) 매우 혼란 스럽다는 것을 발견했다. 그래서 나는 나의 목표에 도달 할 수 없다.

누군가 나를 도울 수 있습니까?

추신. This은 내 샘플의 .csproj에 대한 하이퍼 링크입니다.

답변

1

gridControl1.UseEmbeddedNavigator 속성을 true로 설정하십시오. 보기 하단에 데이터 탐색기 위젯이 생깁니다.

그러나 그곳에서만 당신을 얻을 수 있습니다. 표에서 고객에게 주문을 추가하려면 고객 클래스가 Orders 속성에 List 대신 BindingList을 사용해야합니다.

자세한 내용은 here을 참조하십시오. 설명서가 부족한 경우 Support Center에서 유용한 자료를 찾을 수도 있습니다.

편집 : 몇 가지 다른 옵션을 고려할는 다음과 같습니다 데이터베이스에 그리드 바인딩

  1. .
  2. XML 데이터에 바인딩하고 DataSet을 사용하십시오.

이미 데이터베이스에 데이터를 저장하고 있다면 옵션 1이 좋습니다. 데이터를 아직 어디에도 저장하지 않으면 어느쪽으로 든 갈 수 있습니다.

+0

감사합니다. 나는 단순한 목록 클래스 대신에 bindingList를 사용하여 시도해 보았다.이제 마스터 행 (최근 예제의 고객 행)을 추가 할 수 있지만 세부 사항은 해결되지 않았습니다 (최근 예제의 행 순서). 분명히 세부 gridview는 목록이고 BindingList가 아닌 인 "Orders"속성에 직접 바인딩됩니다. – GiveEmTheBoot

+0

List에서 BindingList로 "Orders"속성의 유형을 변경하지 않고 어떻게 해결할 수 있습니까? 내 모델 계층에서 바인딩 지향 유형을 사용하고 싶지 않고 또한 너무 많아서 모든 비즈니스 논리 모델 컨테이너 어셈블리를 다시 컴파일하지 않으려 고합니다 ... 내 해결 방법이나 포장 방법이 있습니까? 모델을 완전히 편집 가능하게 만들고 gridcontrol의 데이터 소스로 사용합니까? 감사! – GiveEmTheBoot

+0

내가 아는 누구도. 가장 높은 수준에서 옵션은 1) IBindingList 인터페이스를 구현하는 컨테이너를 사용하거나 2) 데이터베이스에 컨트롤을 바인딩하거나 3) DataSet 클래스를 통해 XML 데이터에 바인딩합니다. 자세한 내용은 http://documentation.devexpress.com/#WindowsForms/CustomDocument2395를 참조하십시오. – kenrogers