Получить выбранный идентификатор узла из RadTreeView (заполняется с Sql Server) - PullRequest
0 голосов
/ 08 октября 2018

У меня есть TreeView, который получает данные из таблицы сервера SQL.Мой код успешно заполняет родительские и дочерние узлы.Я только хочу знать, как получить идентификатор поля Node в TextBox, когда я выбираю любой узел.

имя столбца идентификатора: cabinetID

Воткод, который я использую для заполнения TreeView:

        public void loadContainerTree()
    {
       // fMain fm = new fMain();
       // txtRepositoryID.Text = fm.repositoryID.Text;
        repositoryid = Convert.ToInt32(txtRepositoryID.Text);

        conn.Open();
        SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM tblCabinets WHERE ParentID IS NULL AND repositoryID = @RepositoryID", conn);
        adapter.SelectCommand.Parameters.AddWithValue("@RepositoryID", repositoryid);
        DataTable dt = new DataTable();
        adapter.Fill(dt);

        RadTreeNode parentNode;
        foreach (DataRow dr in dt.Rows)
        {
            parentNode = ContainersTree.Nodes.Add(dr["CabinetName"].ToString());
            PopulateTreeView(dr["CabinetID"].ToString(), parentNode);
        }
        ContainersTree.ExpandAll();
        conn.Close();
    }

    private void PopulateTreeView(string parentid, RadTreeNode parentNode)
    {
        SqlDataAdapter adapterchild = new SqlDataAdapter("SELECT * FROM tblCabinets WHERE ParentID = @ParentID AND repositoryID = @RepositoryID", conn);
        adapterchild.SelectCommand.Parameters.AddWithValue("@ParentID", parentid);
        adapterchild.SelectCommand.Parameters.AddWithValue("@RepositoryID", repositoryid);
        DataTable dtchild = new DataTable();
        adapterchild.Fill(dtchild);

        foreach(DataRow dr in dtchild.Rows)
        {
            RadTreeNode childNode;
            if (parentNode == null)
            {
                childNode = ContainersTree.Nodes.Add(dr["cabinetName"].ToString());
            }
            else
            {

                childNode = parentNode.Nodes.Add(dr["cabinetName"].ToString());
                PopulateTreeView(dr["cabinetID"].ToString(), childNode);
            }
        }

    }

1 Ответ

0 голосов
/ 11 октября 2018

Базовый рабочий процесс с TreeView/Tag или любым другим элементом управления.

Прежде всего Tag is an Object that contains data about the control. The default is null, что означает, что мы можем использовать тег для хранения string или int или любого CustomClass

Теперь давайте создадим Custom class следующим образом:

public class Cabinet
{
    public int Id { get; set; }
    public string Name { get; set; }
    // Any other value
}

Теперь мы получим данные из нашей базы данных и сохраним их в узле дерева следующим образом:

public static void AddNodeToTreeView(this TreeView tv, string Text, Cabinet cabinet)
{
    TreeNode n = new TreeNode();
    n.Text = Text;
    n.Tag = cabinet;
    tv.Add(n);
}

Мы называем это следующим образомthis:

Cabinet c = new Cabinet();
c.Id = 1;//You can store data from sql here
c.Name = "Some Name"; //You can store data from sql here
yourTreeView.AddNodeToTreeView("SomeTextTOBeDisplayed", c);

И теперь все, что вам нужно сделать, это получить нужный вам Node из события:

private void treeView1_Click(object sender, EventArgs e)
{
    Cabinet c = yourTreeView.SelectedNode.Tag as Cabinet;

    // Here do whatever you want with data
}

или из цикла:

foreach(TreeNode n in yourTreeView.Nodes)
{
    Cabinet c = n.Tag as Cabinet;
}
...