2015-03-22 3 views
0

У меня есть TreeView, который заполняется данными из таблицы базы данных SQL Server, я хочу, чтобы вставить в него данные на основе выбранного элемента ID в базе данных, это мой код:Как получить идентификационный номер из выбранного узла treeView?

private void Form1_Load(object sender, EventArgs e) 
    { 
     TreeLoad(); 
    } 

    // Connecting to Database and retieving data 
    private DataTable Select(int ID) 
    { 
     SqlConnection conn = new SqlConnection(@"server= M_SHAWAF\ORCHESTRATE; integrated security= true; database= FM"); 
     conn.Open(); 
     SqlCommand cmd = new SqlCommand("GetNodes2", conn); 
     cmd.CommandType = CommandType.StoredProcedure; 
     SqlParameter parameter = new SqlParameter("ID", ID); 
     parameter.SqlDbType = SqlDbType.Int; 
     cmd.Parameters.Add(parameter); 
     SqlDataAdapter ad = new SqlDataAdapter(cmd); 
     DataTable dt = new DataTable(); 
     ad.Fill(dt); 
     return dt; 
    } 

    //Loading the treeView1 
    void TreeLoad() 
    { 
     DataTable dt = Select(0); 
     AddNodes(dt, treeView1.Nodes); 
    } 

    //Adding nodes to treeView1 
    void AddNodes(DataTable dt, TreeNodeCollection coll) 
    { 
     foreach (DataRow dr in dt.Rows) 
     { 
      TreeNode node = new TreeNode(); 
      node.Text = dr[1].ToString(); 
      coll.Add(node); 

      try 
      { 
       DataTable child = Select((int)dr[0]); 

       if (child.Rows.Count > 0) 
       { 
        AddNodes(child, node.Nodes); 
       } 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
     } 
    } 

Это таблица:

enter image description here

форма:

enter image description here

Я хочу получить EmpID выбранного узла, когда я нажимаю insert btn (есть еще одна форма окна, у которой есть текстовое поле для нового имени).

GetNodes хранимая процедура:

create procedure GetNodes 
    @ID int 
as 
    select 
     e.EmpID, e.EmpName 
    from 
     Employee e 
    where 
     isnull(e.ManagerID, 0) = @ID 

    return 
+0

Just 4 просмотров: O: O –

ответ

1

Одним из вариантов является сохранение идентификатора в категории каждого узла. Затем вы можете захватить его, когда нажимаете кнопку, вызывая treeView1.SelectedNode.Tag.

+0

Как использовать тег свойства пожалуйста? –

0

вам нужно зацикливать каждый узел на дереве, как вы его заполняете из базы данных, например.

void SelectNodeOnTreeView(string EmpID, TreeNodeCollection NodeCollection) 
    { 
     if (NodeCollection.Count > 0) 
     { 
      foreach (TreeNode node in NodeCollection) 
      { 
       if (node.Text == EmpID) 
       { 
        treeView1.SelectedNode = node; 
        break; 
       } 
       SelectNodeOnTreeView(EmpID, node.Nodes); 

      } 
     } 
    } 
0

Вы можете создать свой собственный класс TreeNode, который реализует TreeNode но также добавить другие необходимые поля, такие как id:

class myTreeNode : TreeNode 
{ 
    public int id; 

    public myTreeNode(string text, int id) 
    { 
     this.Text = text; 
     this.id = id; 
    } 
} 

затем в вашем AddNodes метод в цикле foreach, вместо:

TreeNode node = new TreeNode(); 
node.Text = dr[1].ToString(); 

сделать что-то вроде этого:

TreeNode node = new myTreeNode(dr[1].ToString(), (int)dr[0]); //don't know where you're storing your ID, here I'm assuming it's in dr[0]. 

Таким образом, вы должны быть в состоянии получить идентификатор выбранного узла, делая что-то вроде этого:

myTreeNode selectedNode = (myTreeNode)treeview1.SelectedNode; 
int selectedID = selectedNode.id; 
Смежные вопросы