.Net中将无限级栏目绑定到DropDownList代码

  最近在写一个.net的信息发布系统,由于采用的是无限级目录,所以添加新闻时目录的呈现很是个问题,看过不少论坛都采用的是下面的呈现方式,决定也借鉴一哈子。
╋专题报道
│┣思政教育
│┣就业指导
│┣考研指南
╋文学艺术
│┣散文
││┣在水一方
││┣情感倾诉
  在c#里用递归很容易显示出上面这种效果,但是我一直没找到很好的方法将栏目Bind到DropDownList控件里去,后来决定先构造一个DataTable,然后将处理过后的栏目逐条写进DataTable里。方法有点苯,但总算解决了问题。

代码:
    DataTable dtNewsClass = new DataTable();
    protected void Page_Load(object sender, EventArgs e)
    {
        if(!IsPostBack)
        {    
            DataColumn keyCol = new DataColumn("id", typeof(Int32));
            dtNewsClass.Columns.Add(keyCol);
            dtNewsClass.Columns.Add(new DataColumn("classname", typeof(string)));
            SqlConnection sqlCnn = new SqlConnection(strCnn);
            SqlCommand sqlCmd = new SqlCommand("sel_class", sqlCnn);
            //相当于select * from T_Class where parentid = 0 order by id asc
            sqlCmd.CommandType = CommandType.StoredProcedure;
            SqlDataAdapter sqlDA = new SqlDataAdapter();
            sqlDA.SelectCommand = sqlCmd;
            sqlCmd.Parameters.Add("@id", SqlDbType.Int);
            sqlCmd.Parameters["@id"].Value = 0;
            sqlDA.MissingSchemaAction = MissingSchemaAction.AddWithKey;
            DataSet NewsDataSet = new DataSet();
            sqlDA.Fill(NewsDataSet,"T_Class");
            DataTable ClassDT =NewsDataSet.Tables["T_Class"];
            for (int i = 0; i < ClassDT.Rows.Count; i++)
            {
                DataRow newRow = dtNewsClass.NewRow();
                newRow["id"] = ClassDT.Rows[i]["id"];
                newRow["classname"] = "╋" + ClassDT.Rows[i]["classname"];
                dtNewsClass.Rows.Add(newRow);
                showclass((int)ClassDT.Rows[i]["id"], 1);
            }
            DDL_Class.DataSource = dtNewsClass;
            DDL_Class.DataBind();
            sqlCnn.Close();
        }

    public void showclass(int id, int n)
    {
        SqlConnection sqlCnn = new SqlConnection(strCnn);
        SqlCommand sqlCmd = new SqlCommand("sel_class", sqlCnn);
       //相当于select * from T_Class where parentid =@id order by id asc
        sqlCmd.CommandType = CommandType.StoredProcedure;
        SqlDataAdapter sqlDA = new SqlDataAdapter();
        sqlDA.SelectCommand = sqlCmd;
        sqlCmd.Parameters.Add("@id", SqlDbType.Int);
        sqlCmd.Parameters["@id"].Value = id;
        sqlDA.MissingSchemaAction = MissingSchemaAction.AddWithKey;
        DataSet newsDataSet = new DataSet();
        sqlDA.Fill(newsDataSet, "T_Class");
        DataTable newsDT = newsDataSet.Tables["T_Class"];
        string sClass = "";
        int num;
        for (num = 1; num <= n; num++)
        {
            sClass = sClass + "│";
        }
        for (int i = 0; i < newsDT.Rows.Count; i++)
        {
            DataRow newRow = dtNewsClass.NewRow();
            newRow["id"] = newsDT.Rows[i]["id"];
            newRow["classname"] = sClass + "┣" + newsDT.Rows[i]["classname"];
            dtNewsClass.Rows.Add(newRow);
            showclass((int)newsDT.Rows[i]["id"], num);
        }
        sqlCnn.Close();
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值