2010-04-29 4 views
0

나는 ListBox와 2 개의 DataGridViews를 가지고 있습니다.비즈니스 개체 (2 가지 질문)와 함께 세부 사항 세부 사항

나는

[Serializable] 
public class Process 
{ 
... 
    public string ProcessName { get; set; } 
    public List<Step> Steps { get; set; } 
} 

[Serializable] 
public class Step 
{ 
... 
    public List<StepEvent> StepEvents { get; set; } 
} 

[Serializable] 
public class StepEvent 
{ 
... 
    public int EventId { get; set; } 
} 

내가 목록 상자 첫 번째 그리드를 연결할 수있는 객체를 가지고,하지만 난 두 번째 그리드를 연결 할 수 없습니다. 나는 그것의 객체가 아닌 DataTable을

코드는 지금까지

 List<Process> processes = new XMLHelper().CreateObject<List<Process>>(GetXmlProcess()); 

     listProcess.DataSource = processes; 
     listProcess.DisplayMember = "ProcessName"; 
     listProcess.ValueMember = "ProcessName"; 

     dgSteps.DataSource = processes; 
     dgSteps.DataMember = "Steps"; 


     //List<Step> steps = (from p in processes 
     //     from st in p.Steps 
     //     select st).ToList(); 

     dgStepEvents.DataSource = processes; 
     dgStepEvents.DataMember = "Steps.StepEvents"; 

가 아무리 dgStepEvents.DataMember을 무엇을 나에게 오류를 제공하지 않기 때문에 나는하여 DataRelation을 사용할 수 있다고 생각하지 않습니다. 당신이 볼 수 있듯이 LINQ를 시도했지만 그 다음 [steps]은 새로운 객체이고 링크되지 않습니다.

두 번째 관련 질문 : BindableSource를 많이 읽었지만 listview와 DataGrid가 이미 동기화되어 있기 때문에 그런 식의 것이 필요 없다고 생각했습니다.

답변

1

당신은 그것에게 SelectIndexChange 이벤트

private void listProcess_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     Process p = listProcess.SelectedItem as Process; 
     dgSteps.DataSource = p.Steps; 

    } 

    private void dgSteps_SelectionChanged(object sender, EventArgs e) 
    { 
     List<Step> steps = dgSteps.DataSource as List<Step>; 

     dgStepEvents.DataSource = steps[dgSteps.CurrentRow.Index].StepEvents; 

    } 
을 접선의 구식 방법을 할 수
관련 문제