2011-03-03 5 views
0
에서

내 데이터베이스 테이블 구조는 다음과 같다 :바인딩 C# Windows Form에 트 리뷰 데이터베이스

ID (기본 키), 제목 (NVARCHAR), ParentID

(이것은 현재 테이블의 ID입니다)

첫 번째 노드 (루트)의 'ParentID'값이 -1입니다. 이 데이터를 메모리에로드했습니다 (예 : 클래스 목록) TreeView에 루프 또는 다른 항목이있는 항목을 추가하려면 어떻게해야합니까?

답변

0

이 코드를 작성 했습니까?

+1

제대로 작동합니까? (당신은 단지 그것이 좋은 스타일인지를 알고 싶을뿐), 아니면 오류가 있습니까? – Justin

+0

제대로 작동합니다. – Shahin

+0

이러한 메서드는 매우 결함이 있습니다. 단일 쿼리 결과를 반복하는 대신 데이터베이스 쿼리와 함께 재귀 함수를 사용합니다. – too

0

데이터를 반복하고 표시 할 데이터가 포함 된 TreeNodes을 만들 수 있습니다. 필요한 경우 노드를 부모 노드로 볼 수도 있습니다.

그런 다음 트리보기 노드 컬렉션에 트리 노트를 추가 할 수 있습니다. 이 방법

private void Heading_Load(object sender, System.EventArgs e) 
{ 
    InsertNodes(null, 0); 
} 
private void InsertNodes(TreeNode n, int hdrID) 
{ 
    System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection("Data Source=.\\sqlexpress;Initial Catalog=Acounting;Integrated Security=True;Pooling=False"); 
    con.Open(); 
    SqlCommand cmd = new SqlCommand("SELECT hdrid,title FROM [Heading] WHERE ParentID=" + hdrID, con); 
    SqlDataReader rdr = cmd.ExecuteReader(); 
    while (rdr.Read()) { 
     TreeNode t = new TreeNode(rdr("title").ToString()); 
     InsertNodes(t, Convert.ToInt16(rdr("hdrID").ToString())); 
     if (n == null) { 
      trvHeader.Nodes.Add(t); 
     } else { 
      n.Nodes.Add(t); 
     } 
    } 
    rdr.Close(); 
     } 

입니다 :

1

데이터를 ParentID로 정렬하면 첫 번째 결과는 루트 1 (-1)이됩니다. 그런 다음 사용하십시오

 if (ParentID == -1) 
     { 
      treeView1.Nodes.Add(ID, Title); 
     } 
     else 
     { 
      TreeNode tn = treeView1.Nodes.Find(ID, true)[0]; 
      tn.Nodes.Add(ID, Title); 
     } 

그 이전의 모든 노드가 이미 트리에 있음을 확인하고 고유 키 (ID)로 찾으십시오.