내 데이터베이스 테이블 구조는 다음과 같다 :바인딩 C# Windows Form에 트 리뷰 데이터베이스
(이것은 현재 테이블의 ID입니다)ID (기본 키), 제목 (NVARCHAR), ParentID
첫 번째 노드 (루트)의 'ParentID'값이 -1입니다. 이 데이터를 메모리에로드했습니다 (예 : 클래스 목록) TreeView에 루프 또는 다른 항목이있는 항목을 추가하려면 어떻게해야합니까?
내 데이터베이스 테이블 구조는 다음과 같다 :바인딩 C# Windows Form에 트 리뷰 데이터베이스
(이것은 현재 테이블의 ID입니다)ID (기본 키), 제목 (NVARCHAR), ParentID
첫 번째 노드 (루트)의 'ParentID'값이 -1입니다. 이 데이터를 메모리에로드했습니다 (예 : 클래스 목록) TreeView에 루프 또는 다른 항목이있는 항목을 추가하려면 어떻게해야합니까?
이 코드를 작성 했습니까?
데이터를 반복하고 표시 할 데이터가 포함 된 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();
}
입니다 :
데이터를 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)로 찾으십시오.
제대로 작동합니까? (당신은 단지 그것이 좋은 스타일인지를 알고 싶을뿐), 아니면 오류가 있습니까? – Justin
제대로 작동합니다. – Shahin
이러한 메서드는 매우 결함이 있습니다. 단일 쿼리 결과를 반복하는 대신 데이터베이스 쿼리와 함께 재귀 함수를 사용합니다. – too