简体   繁体   English

如何从选定的treeView节点获取ID号?

[英]How to get the ID number from a selected treeView node?

I have a TreeView that is populated with data from a SQL Server database table, I want to insert data into it based on the selected item ID in the database, this is my code: 我有一个用SQL Server数据库表中的数据填充的TreeView ,我想根据数据库中选定的项目ID将数据插入其中,这是我的代码:

    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);
            }
        }
    }

This is the table: 这是表:

在此处输入图片说明

The form: 表格:

在此处输入图片说明

I want to get the EmpID of the selected node when I click insert btn (there is another windows form that has a textbox for the new name). 当我单击插入btn时,我想获取所选节点的EmpID (还有另一个Windows窗体,其中包含新名称的文本框)。

GetNodes stored procedure: GetNodes存储过程:

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

   return

One option is to store the ID in each node's Tag. 一种选择是将ID存储在每个节点的Tag中。 Then you can grab it when the button is clicked by calling treeView1.SelectedNode.Tag . 然后,您可以通过调用treeView1.SelectedNode.Tag来获取单击按钮时的效果。

you need to loop for each node on tree view the way as you populate it from database for example. 例如,当您从数据库中填充树形视图时,您需要为树形视图中的每个节点循环。

    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);

            }
        }
    }

You could create a your own TreeNode class which implements TreeNode but also add other necessary fields such as id : 您可以创建自己的TreeNode类,该类实现TreeNode但还可以添加其他必要的字段,例如id

class myTreeNode : TreeNode
{
    public int id;

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

then in your AddNodes method in the foreach loop, instead of: 然后在foreach循环的AddNodes方法中,而不是:

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

do something like this: 做这样的事情:

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].

This way, you should be able to get the id of the selected node by doing something like this: 这样,您应该可以通过执行以下操作来获取所选节点的ID:

myTreeNode selectedNode = (myTreeNode)treeview1.SelectedNode;
int selectedID = selectedNode.id;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM