首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

百分请问一个VS2005下Treeview绑定的有关问题

2012-01-26 
百分请教一个VS2005下Treeview绑定的问题我用下面的代码读取分类表并绑定至页面中的TreeView,递归成功,但

百分请教一个VS2005下Treeview绑定的问题
我用下面的代码读取分类表并绑定至页面中的TreeView,递归成功,但是显示的是所有的根分类及下面的子分类,而我只想显示id为   2,3,4,5,6这几个根目录及他们下面的所有子目录,子目录下还分为若干级子目录,请问如何实现   ,今天慕白兄给我讲解了半天,实在是没弄明白,只好再次发问,只要解决,立即结贴
(参考图片为:http://www.ssdj.gov.cn/1.jpg,比方说我只要取出“考试管理”和“成绩管理”这两个根节点及他们的所有子节点,要如何弄)
请给出完整代码,只说原理,俺看不懂,或者在下面的代码上直接修改更好,谢谢

        protected   void   Page_Load(object   sender,   EventArgs   e)
        {
                string   Sql   =   "select   *   from   limfunction   order   by   parentID   ";
                        DataSet   ds   =   SqlHelper.ExecuteDataSet(SqlHelper.sqlstring,CommandType.Text,Sql,null);
                        this.ViewState[ "ds "]   =   ds;
                        if   (!this.IsPostBack)
                        {
                                AddTree(0,   (TreeNode)null,   TreeView0);
                        }

        }

        public   void   AddTree(int   ParentID,   TreeNode   pNode,TreeView   treename)
        {
                DataSet   ds   =   (DataSet)this.ViewState[ "ds "];
                DataView   dvTree   =   new   DataView(ds.Tables[0]);

                //过滤ParentID,得到当前的所有子节点
                dvTree.RowFilter   =   "[PARENTID]   =   "   +   ParentID;

                foreach   (DataRowView   Row   in   dvTree)
                {
                        TreeNode   Node   =   new   TreeNode();
                        if   (pNode   ==   null)
                        {         //添加根节点
                                Node.Text   =   Row[ "cname "].ToString();
                                Node.Value   =   Row[ "ID "].ToString();
                                Node.NavigateUrl   =   Row[ "linkurl "].ToString();
                                Node.ToolTip   =   Row[ "cname "].ToString();
                                treename.Nodes.Add(Node);
                                Node.Expanded   =   true;


                                AddTree(Int32.Parse(Row[ "ID "].ToString()),   Node,treename);                 //再次递归
                        }
                        else
                        {       //̀添加当前节点的子节点
                                Node.Text   =   Row[ "cname "].ToString();
                                Node.Value   =   Row[ "ID "].ToString();
                                Node.NavigateUrl   =   Row[ "linkurl "].ToString();
                                Node.ToolTip   =   Row[ "cname "].ToString();
                                pNode.ChildNodes.Add(Node);
                                Node.Expanded   =   true;
                                AddTree(Int32.Parse(Row[ "ID "].ToString()),   Node,treename);           //再次递归
                        }

                }
        }


[解决办法]
关注
[解决办法]
顶一下
[解决办法]
顶一下...呵呵!
[解决办法]
帮你顶一下吧。
[解决办法]
数据库是如何设置的?
建议设计数据库的时候设计一个列比如PROWID为上下级判定列,然后主键为ROWID,那么如果PROWID为-1就是根节点,如果为其他值,比如2,那么它的上级父节点就是ROWID为2的节点,如此设置,然后再使用下面的递归方法实现

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
AddTreeView(-1, (TreeNode)null);
}
}

protected void AddTreeView(Int64 ID, TreeNode tn)
{
SqlConnection objConn = new SqlConnection(ConfigurationManager.ConnectionStrings[ "MaterialDBConnectionString "].ToString().Trim());

String strCmd = "select MaterialName,RowID from MaterialCodeDef where PRowID= " + ID;

SqlCommand objCmd = new SqlCommand();

objCmd.Connection = objConn;
objConn.Open();
objCmd.CommandText = strCmd;

SqlDataReader objDR = objCmd.ExecuteReader();

while (objDR.Read())
{
if (tn == null)
{
TreeNode myNode = new TreeNode();
myNode.Text = objDR[ "MaterialName "].ToString().Trim();
myNode.Value = objDR[ "RowID "].ToString().Trim();


TreeView1.Nodes.Add(myNode);
AddTreeView(Int64.Parse(objDR[ "RowID "].ToString().Trim()), (TreeNode)myNode);
}
else
{
TreeNode myNode1 = new TreeNode();
myNode1.Text = objDR[ "MaterialName "].ToString().Trim();
myNode1.Value = objDR[ "RowID "].ToString().Trim();
tn.ChildNodes.Add(myNode1);
AddTreeView(Int64.Parse(objDR[ "RowID "].ToString().Trim()), (TreeNode)myNode1);
}
}

objDR.Close();
objConn.Close();
}

热点排行