如何在文本框中的树视图中显示所选节点?

时间:2012-03-21 11:20:35

标签: c#

我正在使用带有复选框和1提交按钮的树视图,它正在从数据库中获取值。

现在,如果我选中复选框并单击提交按钮,它应该在文本框中显示所选节点.....

这是我的树视图代码

public void Load_tree()
    {
        DataSet PrSet = PDataset("SELECT * FROM tbl_saleschannelhierarchyconfig");
        TreeView1.Nodes.Clear();
        foreach (DataRow dr in PrSet.Tables[0].Rows)
        {
            if ((int)dr["ParentID"] == 0)
            {
                TreeNode tnParent = new TreeNode();
                tnParent.Text = dr["Parent"].ToString();
                string value = dr["ParentID"].ToString();
                //tnParent.Text = dr["SalesChannelName"].ToString(); - if u use this   instead of the previous two lines, then "kmart" will be the parent. else "root" will be the parent.
                //string value = dr["SalesChannelConfigID"].ToString();
                tnParent.Expand();
                TreeView1.Nodes.Add(tnParent);
                FillChild(tnParent, value);
            }
        }
    }       
    public int FillChild(TreeNode parent, string SalesChannelConfigID)
    { 
        DataSet ds = PDataset("SELECT * FROM tbl_saleschannelhierarchyconfig WHERE   ParentID =" + SalesChannelConfigID); 
        if (ds.Tables[0].Rows.Count > 0)
        {
            foreach (DataRow dr in ds.Tables[0].Rows)
            {
                TreeNode child = new TreeNode(); 
                child.Text = dr["SalesChannelName"].ToString().Trim(); 
                string temp = dr["SalesChannelConfigID"].ToString(); 
                child.Collapse();
                parent.ChildNodes.Add(child);
                FillChild(child, temp); 
            }
            return 0;
        } 
        else
        { 
            return 0; 
        } 

和按钮点击代码

   protected void Button1_Click(object sender, EventArgs e)
    {

        txtRetailCustomerGroup.Text = TreeView1.SelectedNode.Parent.ToString();
    }

显示此异常 “对象引用未设置为对象的实例。”

可以帮助我吗?

3 个答案:

答案 0 :(得分:1)

问题是你正试图用一个基本没有实例化的对象“做某事”。为了让你在内存中做某些事情 - 你使用一个对象作为它在内存中的位置的引用。您使用的对象没有引用内存中的位置(没有实际的“物理”对象),因此无法运行代码。

如果它只在你点击按钮时发生(即问题在你发布的事件处理程序中),那么它将是txtRetailCustomerGroup(因此它无法访问文本)或者它将是所选节点的TreeView1,SelectedNode或Parent(因此无法转换为字符串)。

使用断点快速查看对象(找到未实例化的对象),并且它应该变得明显在null对象所在的位置。然后你必须找出原因。

答案 1 :(得分:1)

在您学习如何使用断点之前,

将此用作按钮功能:

protected void Button1_Click(object sender, EventArgs e)
{
    MessageBox.Show(string.Format("txt={0}\r\ntv={1}\r\nsn={2}",
                                  txtRetailCustomerGroup,
                                  TreeView1,
                                  TreeView1 == null ? "." : TreeView1.SelectedNode));

    txtRetailCustomerGroup.Text = TreeView1.SelectedNode.Parent.ToString();
}

运行一次,让我们知道弹出的消息框说明了什么。这样可以解决问题。

答案 2 :(得分:0)

 protected void Button1_Click(object sender, EventArgs e)
    {

        txtRetailCustomerGroup.Text = TreeView1.SelectedNode.Parent.ToString();
    }

如果您选择主根节点,它没有父节点,因此它返回此错误

如果这样改变,它将成功运行

 txtRetailCustomerGroup.Text = TreeView1.SelectedNode.Text.ToString();

否则试试这个

  protected void Button1_Click(object sender, EventArgs e)
        {
            try{
                txtRetailCustomerGroup.Text = TreeView1.SelectedNode.Parent.ToString();
             }
             catch{}
    }