TreeView获取不到选中的子节点的值

Fs_2011 2013-02-17 10:45:19
写了个简单的树形结构,想获取每个节点的值,但是点击父节点使用TreeView的SelectedNode可以获取选中的节点,而点击子节点的时候SelectedNode的值为null,什么原因呢?

也在网上查了一些资料,但是,基本上都是通过各种方法使用SelectedNode获取,有什么可能的原因导致点击选中子节点而SelectedNode的值为null呢?
...全文
356 18 点赞 打赏 收藏 举报
写回复
18 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
cfreez 2013-02-18
居然没有用递归,也可以
  • 打赏
  • 举报
回复
Fs_2011 2013-02-17
引用 7 楼 wangwei703 的回复:
前后台代码贴出来看看
没有什么前台代码,就 <div style="float:left;"> <asp:TreeView ID="CategoryView" runat="server"> </asp:TreeView> </div> 这么简单
  • 打赏
  • 举报
回复
ddgx 2013-02-17
前后台代码贴出来看看
  • 打赏
  • 举报
回复
Fs_2011 2013-02-17
引用 5 楼 wangwei703 的回复:
是不是因为你点击node的时候postback了,页面刷新了回到初始状态 这个时候selectednode就是没有选中的 加载树的时候,判断下postback
判断了postback了,postback的时候也只是父节点选中有值,而点击子节点没有值
  • 打赏
  • 举报
回复
ddgx 2013-02-17
是不是因为你点击node的时候postback了,页面刷新了回到初始状态 这个时候selectednode就是没有选中的 加载树的时候,判断下postback
  • 打赏
  • 举报
回复
Fs_2011 2013-02-17
引用 3 楼 still_melody 的回复:
用<ul><li>不行吗?
可以是可以,不过还要自己写样式和js事件,太麻烦,不如treeview现成的来的方便啊
  • 打赏
  • 举报
回复
still_melody 2013-02-17
用<ul><li>不行吗?
  • 打赏
  • 举报
回复
Fs_2011 2013-02-17
引用 1 楼 still_melody 的回复:
webform 从没用过TreeView 帮顶
我也是第一次用,不熟悉,就碰到这种问题
  • 打赏
  • 举报
回复
still_melody 2013-02-17
webform 从没用过TreeView 帮顶
  • 打赏
  • 举报
回复
kele819830822 2013-02-17
解决就好,其实多看,多试,断点,很容易就能找到问题。
  • 打赏
  • 举报
回复
Fs_2011 2013-02-17
我去~~~果然粗心大意害死人啊,楼上的你看出来问题出在哪儿了吗? 就毁在我那个NavigateUrl 上了,父节点的NavigateUrl 属性赋值的语句被我屏蔽了,而子节点的忽略了,没有屏蔽,所以……苍天啊~~~ 谢谢啦!
  • 打赏
  • 举报
回复
kele819830822 2013-02-17
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;

namespace WebApplication1
{
    public partial class WebForm3 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                CategoryNodeBind();
            }
        }

        private void CategoryNodeBind()
        {
            //string sqlCommand = "SELECT * FROM DBO.Category WHERE ID=PARENTID";
            DataTable parentData = createdb();//GetCategories(sqlCommand);
            for (int i = 0; i < parentData.Rows.Count; i++)
            {
                TreeNode parentNode = new TreeNode();
                parentNode.Text = parentData.Rows[i]["Name"].ToString();
                parentNode.Value = parentData.Rows[i]["Id"].ToString();
                //parentNode.NavigateUrl = parentData.Rows[i]["CatalogEditUrl"].ToString();
                this.TreeView1.Nodes.Add(parentNode);
                SubCategoryNodeBind(parentNode);
            }
        }

        private void SubCategoryNodeBind(TreeNode parentNode)
        {
            //string sqlCommand = "SELECT * FROM DBO.CATEGORY WHERE PARENTID='" + parentNode.Value + "'";
            DataTable childData = createsubdb();//GetCategories(sqlCommand);
            for (int i = 0; i < childData.Rows.Count; i++)
            {
                TreeNode childNode = new TreeNode();
                childNode.Text = childData.Rows[i]["Name"].ToString();
                childNode.Value = childData.Rows[i]["Id"].ToString();
                //childNode.NavigateUrl = childData.Rows[i]["CatalogEditUrl"].ToString();
                parentNode.ChildNodes.Add(childNode);
            }
        }

        public DataTable createdb()
        {
            DataTable db = new DataTable();
            DataColumn dc;
            dc = new DataColumn("Name", System.Type.GetType("System.String"));
            db.Columns.Add(dc);
            dc = new DataColumn("Id", System.Type.GetType("System.Int32"));
            db.Columns.Add(dc);
            DataRow dr;
            for (int i = 0; i < 3; i++)
            {
                dr = db.NewRow();
                dr[0] = "name" + i;
                dr[1] = 1 + i;
                db.Rows.Add(dr);
            }
            
            return db;
        }
        public DataTable createsubdb()
        {
            DataTable db = new DataTable();
            DataColumn dc;
            dc = new DataColumn("Name", System.Type.GetType("System.String"));
            db.Columns.Add(dc);
            dc = new DataColumn("Id", System.Type.GetType("System.Int32"));
            db.Columns.Add(dc);
            DataRow dr;
            for (int i = 0; i < 3; i++)
            {
                dr = db.NewRow();
                dr[0] = "sub"+ i;
                dr[1] = 1+i;
                db.Rows.Add(dr);
            }

            return db;
        }

        protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
        {
            TreeNode aaa = TreeView1.SelectedNode;
            string aa = aaa.Value;
        }
    }
}
照LZ改的,完全OK通过
  • 打赏
  • 举报
回复
Fs_2011 2013-02-17
引用 12 楼 kele819830822 的回复:
特地试了下,代码没什么问题嘛。。。至少我这里好的,感觉问题应该出在LZ的datatable上,看看子节点的datatable的ROWS.COUNT和里面的数据是否正确吧。 另外你2个SELECT语句查的都是一张表,一个是ID=PARENTID,一个是PARENTID=‘’,ID怎么会=字符的
刚刚点错了,真是不好意思 数据也是有的,米有问题的,如果datatable有问题,是什么问题影响点击子节点取值呢?
  • 打赏
  • 举报
回复
调试一下啊。
  • 打赏
  • 举报
回复
kele819830822 2013-02-17
特地试了下,代码没什么问题嘛。。。至少我这里好的,感觉问题应该出在LZ的datatable上,看看子节点的datatable的ROWS.COUNT和里面的数据是否正确吧。 另外你2个SELECT语句查的都是一张表,一个是ID=PARENTID,一个是PARENTID=‘’,ID怎么会=字符的
  • 打赏
  • 举报
回复
Fs_2011 2013-02-17
引用 9 楼 kele819830822 的回复:
引用 8 楼 Fs_2011 的回复:引用 7 楼 wangwei703 的回复:前后台代码贴出来看看 没有什么前台代码,就 <div style="float:left;"> <asp:TreeView ID="CategoryView" runat="server"> </asp:TreeView……
那,代码贴出来了
  • 打赏
  • 举报
回复
Fs_2011 2013-02-17
private void CategoryNodeBind()
        {
            string sqlCommand = "SELECT * FROM DBO.Category WHERE ID=PARENTID";
            DataTable parentData = GetCategories(sqlCommand);
            for (int i = 0; i < parentData.Rows.Count; i++)
            {
                TreeNode parentNode = new TreeNode();
                parentNode.Text = parentData.Rows[i]["Name"].ToString();
                parentNode.Value = parentData.Rows[i]["Id"].ToString();
                parentNode.NavigateUrl = parentData.Rows[i]["CatalogEditUrl"].ToString();
                this.CategoryView.Nodes.Add(parentNode);
                SubCategoryNodeBind(parentNode);
            }
        }

        private void SubCategoryNodeBind(TreeNode parentNode)
        {
            string sqlCommand = "SELECT * FROM DBO.CATEGORY WHERE PARENTID='" + parentNode.Value + "'";
            DataTable childData = GetCategories(sqlCommand);
            for (int i = 0; i < childData.Rows.Count; i++)
            {
                TreeNode childNode = new TreeNode();
                childNode.Text = childData.Rows[i]["Name"].ToString();
                childNode.Value = childData.Rows[i]["Id"].ToString();
                childNode.NavigateUrl = childData.Rows[i]["CatalogEditUrl"].ToString();
                parentNode.ChildNodes.Add(childNode);
            }
        }
父节点和子节点的绑定方式是一样的,如果出问题那父节点怎么不出问题啊
  • 打赏
  • 举报
回复
kele819830822 2013-02-17
引用 8 楼 Fs_2011 的回复:
引用 7 楼 wangwei703 的回复:前后台代码贴出来看看 没有什么前台代码,就 <div style="float:left;"> <asp:TreeView ID="CategoryView" runat="server"> </asp:TreeView> </di……
看到的,点击拿不到值,那么问题肯定出在后台绑定父节点和子节点的问题上了,LZ上TREEVIEW绑定数据时的代码吧
  • 打赏
  • 举报
回复
相关推荐
发帖
.NET社区
加入

5.9w+

社区成员

.NET技术交流专区
申请成为版主
帖子事件
创建了帖子
2013-02-17 10:45
社区公告
暂无公告