2015-03-17 5 views
1

Я работаю над формой Windows на C#, чтобы построить древовидную структуру, используя данные из базы данных. Существует процедура хранения, в которой содержится следующая информация:windows form treeview с динамическим дочерним элементом

id - node id описание - значение, которое должно отображаться в виде дерева isEndNode - 0, если это конечный узел; 1, если этот узел имеет дочерний элемент

Если isEndNode равен 1, тогда я должен вызвать ту же процедуру хранения с идентификатором текущего узла, чтобы получить под ним список дочернего узла.

Я создал механизм, который вызовет процедуру хранения и получит список элементов, но я не уверен, как заполнить древовидную структуру. Я думал, что я покажу первый список в качестве родительских узлов, и когда пользователь нажимает знак + для расширения, я вызову процедуру хранилища и добавлю новый элемент как дочерний элемент в текущий узел. Я не уверен, как сообщить узлу, что это родительский узел, а не конечный узел. Кто-нибудь построил что-то вроде этого? пожалуйста, помогите

+0

Я создал образец для вас – Sayka

ответ

2

Я создал образец для вас, в котором вы можете понять, как это сделать в вашем.

создал таблицу сотрудников в базе данных

Первоначально имена сотрудников будет положить на в TreeView

Когда имя расширяется, их возраст и PhoneNumber можно посмотреть.

public Form1() 
{ 
    InitializeComponent(); 
    initTreeView(); //TreeView without any nodes in it 
} 

void initTreeView() 
{ 
    SqlConnection con = new SqlConnection(); 
    con.ConnectionString = _ConnectionString; 
    con.Open(); 
    using (SqlCommand comm = new SqlCommand("Select Name From Employees", con)) 
    using (SqlDataReader read = comm.ExecuteReader()) 
     while (read.Read()) 
     { 
      TreeNode tn = new TreeNode(read["Name"].ToString()); 
      tn.Nodes.Add(new TreeNode()); 
      treeView1.Nodes.Add(tn); 
     } 

    treeView1.BeforeExpand += treeView1_BeforeExpand; 
} 

void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e) 
{ 
    TreeNode tNode = e.Node; 
    string empName = tNode.Text; 
    tNode.Nodes.Clear(); 
    SqlConnection con = new SqlConnection(); 
    con.ConnectionString = _ConnectionString; 
    con.Open(); 
    using (SqlCommand comm = new SqlCommand("Select Age, PhoneNumber From Employees Where Name = @empName", con)) 
    { 
     comm.Parameters.AddWithValue("@empName", empName); 
     using (SqlDataReader read = comm.ExecuteReader()) 
      if (read.Read()) 
      { 
       TreeNode nodeAge = new TreeNode(read["Age"].ToString()); 
       TreeNode nodePhone = new TreeNode(read["PhoneNumber"].ToString()); 
       tNode.Nodes.AddRange(new TreeNode[] { nodeAge, nodePhone }); 
      } 
    } 
} 
+0

Это очень помогло мне. Проблема, с которой я столкнулась с этим решением, - это знак плюса даже на последнем узле, только после нажатия знака плюса на последнем узле он идентифицирует его конечный узел. Есть ли способ избежать этого? –

+0

Здесь мы добавляем знак плюса вместе с узлом по ... – Sayka

+0

TreeNode tn = new TreeNode (читаем ["Name"]. ToString()); tn.Nodes.Add (новый TreeNode()); – Sayka

Смежные вопросы