2017-09-07 1 views
0

안녕하세요, 3 개의 필드가있는 데이터 테이블이 있습니다. 예상되는 트리 뷰는 아래 그림과 같습니다.Treeview from DataTable

Expected Result

내 데이터 테이블은이 같은 내용을 반환합니다.

Data table result

그리고 난 아래의 코드를 시도했다. 여기에 자식 노드가 제대로

public void BuildTree(DataTable dt, TreeView trv, Boolean expandAll) 
    { 
     trv.Nodes.Clear(); 
     TreeNode node = default(TreeNode); 
     TreeNode subNode = default(TreeNode); 
     foreach (DataRow row in dt.Rows) 
     { 
      node = Searchnode(row[0].ToString(), trv); 
      if (node != null) 
      { 
       subNode = new TreeNode(row[1].ToString()); 
       node.Nodes.Add(subNode); 
      } 
      else 
      { 
       node = new TreeNode(row[0].ToString()); 
       subNode = new TreeNode(row[1].ToString()); 
       node.Nodes.Add(subNode); 
       trv.Nodes.Add(node); 
      } 
     } 
     if (expandAll) 
     { 
      trv.ExpandAll(); 
     } 
    } 
    private TreeNode Searchnode(string nodetext, TreeView trv) 
    { 
     foreach (TreeNode node in trv.Nodes) 
     { 
      if (node.Text == nodetext) 
      { 
       return node; 
      } 
     } 
     return null; 
    } 
+0

'여기 자식 노드가 제대로 표시되지 않습니다. 무엇을 원하니? ** 할 코드? ** 실제로 ** 무엇을합니까? – mjwills

+0

나는 데이터 테이블을 기반으로하는 이미지와 같은 트리 뷰를 채우고 싶습니다. 하지만 두 번째 아이를 추가 할 수 없습니다. – Jzl

답변

1

내가 그 데이터 테이블을 suposing있어 목록 못하고 것이와 previosly CUSTOMERNAME, DeliverySchedule, 이름으로 정렬되어

초기화 테스트 데이터 다음을 사용하여 DataTable의에서

private void InitializeDataTable() { 
     dt = new DataTable(); 
     dt.Columns.Add("DeliverySchedule"); 
     dt.Columns.Add("Name"); 
     dt.Columns.Add("CustomerName"); 

     AddRow("Daily", "Test", "Team Venkat"); 
     AddRow("Daily", "TestB", "Team Venkat"); 
     AddRow("Weekly", "OtherName", "Team Venkat"); 
     AddRow("Weekly", "OtherName2", "Team Venkat"); 
     AddRow("Daily", "Test", "Team2"); 
     AddRow("Weekly", "Test", "Team2"); 

    } 

    private void AddRow(string schedule, string name, string customer) { 
     DataRow row = dt.NewRow(); 
     row[0] = schedule; 
     row[1] = name; 
     row[2] = customer; 
     dt.Rows.Add(row); 
    } 

로드 트리 3 단계 루프 :

private void LoadBtn_Click(object sender, EventArgs e) { 
     int i = 0; 
     treeView1.Nodes.Clear(); 
     while (i < dt.Rows.Count) { 
      DataRow row = dt.Rows[i]; 
      string customer = row.Field<string>(2); 
      TreeNode customerNode = treeView1.Nodes.Add(customer); 
      while (i < dt.Rows.Count && row.Field<string>(2) == customer) { 
       string schedule = row.Field<string>(0); 
       TreeNode scheduleNode = customerNode.Nodes.Add(schedule); 
       while (i < dt.Rows.Count && row.Field<string>(2) == customer && schedule == row.Field<string>(0)) { 

        string report = row.Field<string>(1); 
        scheduleNode.Nodes.Add(report); 
        if (++i < dt.Rows.Count) 
         row = dt.Rows[i]; 
       } 
      } 
     } 
    } 
+0

좋은 답변, 잘 작동합니다. – Jzl