递归实现dropdownlist树型结构的栏目实例

看到网上有很多DrowDownList的树形结构绑定,偶也看到一个稍微改了下,就是自动计算属于第几层的代码

数据库目录为MenuID,MName,fID

原地址为:http://www.5icoding.com/n36.aspx

 

数据库结构:

效果图:

代码
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Web;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.Text;
using  System.Data;
using  System.Configuration;
using  System.Data.SqlClient;

public   partial   class  TreeDropDownList : System.Web.UI.Page
ExpandedBlockStart.gifContractedBlock.gif
{
    
protected void Page_Load(object sender, EventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
{
        
if (!Page.IsPostBack)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            DataTable table;
            
string con = ConfigurationManager.AppSettings["TreeConnectionString"].ToString();
            SqlConnection conn 
= new SqlConnection(con);
            SqlDataAdapter sda 
= new SqlDataAdapter("select * from Menu", conn);
            table 
= new DataTable();
            sda.Fill(table);


            BindToChannelList(table, 
0,0);   
        }

    }


ExpandedSubBlockStart.gifContractedSubBlock.gif       
/**//// <summary>   
         
/// 递归绑定数据到ddlChannelList控件上,形成树状结构   
         
/// </summary>   
         
/// <param name="dt">数据源</param>   
         
/// <param name="categoryid">栏目id</param>   

        private void BindToChannelList(DataTable dt, int categoryid, int layer)   
ExpandedSubBlockStart.gifContractedSubBlock.gif         
{   
   
              
//DataView dv = dt.DefaultView;使用这句在asp.net 1.1中会出现"在位置 1 处没有任何行。"的错误,感谢阿耀同学的帮助.   
   
              DataView dv
=new DataView(dt);   
                
             dv.RowFilter 
= " fID= " + categoryid.ToString(); //过滤   

             
if (categoryid != 0)
ExpandedSubBlockStart.gifContractedSubBlock.gif             
{
                 layer
++//默认为第一层 ,以前有实例是数据库一列保存层的数据,这里是自动计算,默认为0
             }

             
foreach (DataRowView drv in dv)   
ExpandedSubBlockStart.gifContractedSubBlock.gif             
{   
                   
                   
string span = "";
                 
if (categoryid != 0)
ExpandedSubBlockStart.gifContractedSubBlock.gif                 
{

                     
for (int i = 0; i < layer; i++)//如果i=0,显示的时候第一级菜单就少了个空格
ExpandedSubBlockStart.gifContractedSubBlock.gif
                     {
                         span 
+=" ";
                     }

                     span 
+= "";//添加前面的空格   
                 }



                 ListItem li 
= new ListItem();
                 li.Text 
= span + drv["MName"].ToString();
                 li.Value 
= drv["MenuID"].ToString();   
                 
this.ddlChannelList.Items.Add(li);
                 BindToChannelList(dt,Convert.ToInt32(drv[
"MenuID"]), layer);   
             }
   
         }

        
protected void ddlChannelList_SelectedIndexChanged(object sender, EventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            Response.Write(
"值为:"+this.ddlChannelList.SelectedValue+"--文本内容  为"+this.ddlChannelList.SelectedItem.Text.Trim());
        }

}

 

转载于:https://www.cnblogs.com/Hdsome/archive/2009/11/30/1613725.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值