当前位置:编程学习 > C#/ASP.NET >>

asp.net三级联动菜单问题

    在网上找了一段ASP.NET三级联动菜单的代码,调试后总是只有第一个一级菜单可以实现三级联动,其它的都没有反应,出现不了相应的二级和三级菜单,大家帮忙看下什么原因啊,或者谁有已经运行成功的代码.

if (!IsPostBack)
        {
            //一级分类列表
            this.DropDownList1.DataSource = dsbb.SelectSubjct1();
            this.DropDownList1.DataTextField = "cName";
            this.DropDownList1.DataValueField = "Ccode";
            this.DropDownList1.DataBind();
           
            this.DropDownList1.Items.Insert(0,new ListItem("请选择一级分类","0"));
            this.DropDownList8.Items.Insert(0, new ListItem("请选择二级分类", "0"));
            this.DropDownList9.Items.Insert(0,new ListItem ("请选择三级分类","0"));

            //二级分类列表

                  
        }

 

 /// <summary>
    /// 绑定二级分类
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        libs.Database.Dbbase dbb = new libs.Database.Dbbase();
        if (Convert.ToInt32(this.DropDownList1.SelectedValue) == 0) //清除列表内容
        {
            this.DropDownList8.Items.Clear();
            this.DropDownList8.Items.Insert(0, new ListItem("请选择二级分类", "0"));
            this.DropDownList9.Items.Clear();
            this.DropDownList9.Items.Insert(0, new ListItem("请选择三级分类", "0"));

        }
        else //二级分类列表
        {
            this.DropDownList8.DataSource = dbb.Selectsubjct2(this.DropDownList1.SelectedValue.Substring(0,2));
            this.DropDownList8.DataTextField = "cName";
            this.DropDownList8.DataValueField = "Ccode";
            this.DropDownList8.DataBind();
            this.DropDownList8.Items.Insert(0,new ListItem ("请选择二级分类","0"));
           
            this.DropDownList9.Items.Clear();//清除第三分类
            this.DropDownList9.Items.Insert(0, new ListItem("请选择三级分类", "0"));
        }

    }
    /// <summary>
    /// 绑定三级分类
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void DropDownList8_SelectedIndexChanged(object sender, EventArgs e)
    {
        libs.Database.Dbbase dbase = new libs.Database.Dbbase();
        this.DropDownList9.DataSource = dbase.selectsubject3(this.DropDownList8.SelectedValue.Substring(0,4));
        this.DropDownList9.DataTextField = "cName";
        this.DropDownList9.DataValueField = "Ccode";
        this.DropDownList9.DataBind();
        this.DropDownList9.Items.Insert(0,new ListItem("请选择三级分类","0"));
    }

Dbbase.cs页:

 /// <summary>
       /// 查询一级栏目
       /// </summary>
       /// <returns></returns>
       public DataSet SelectSubjct1()
       {
           string con = System.Configuration.ConfigurationSettings.AppSettings["sqlconn"];
           SqlConnection conn = new SqlConnection(con);
           string sqlstr = "SELECT kndid, Ccode, cName, cLevel FROM kind WHERE cLevel = 1";
           DataSet dst = new DataSet();
           SqlDataAdapter sda = new SqlDataAdapter(sqlstr,conn);
           try
           {
               sda.Fill(dst);
               return dst;
           }
           catch (Exception ex)
           {
               throw new Exception(ex.Message);
           }
           finally
           {
               conn.Close();
           }

       }

       /// <summary>
       /// 查询二级栏目内容
       /// </summary>
       /// <param name="ccode"></param>
       /// <returns></returns>
       public DataSet Selectsubjct2(string ccode)
       {
           string conn1 = System.Configuration.ConfigurationSettings.AppSettings["sqlconn"];
           SqlConnection conn = new SqlConnection(conn1);
           string sqqq = "select kndid,Ccode,cName,cLevel from kind where cLevel = 2 and Ccode like '" + ccode + "%'";

           DataSet dss = new DataSet();
           SqlDataAdapter sdd = new SqlDataAdapter(sqqq,conn);
           try
           {
               sdd.Fill(dss);
               return dss;
           }
           catch (Exception ex)
           {
               throw new Exception(ex.Message);
           }
           finally
           {
               conn.Close();
           }
       }

       /// <summary>
       /// 查询三级栏目内容
       /// </summary>
       /// <param name="cde"></param>
       /// <returns></returns>
       public DataSet selectsubject3(string cde)
       {
           string conn2 = System.Configuration.ConfigurationSettings.AppSettings["sqlconn"];
           SqlConnection conn = new SqlConnection(conn2);
           string sqq = "select kndid,Ccode,cName,cLevel from kind where cLevel = 3 and Ccode like '" + cde + "%'";

           DataSet dst = new DataSet();
           SqlDataAdapter sdaa = new SqlDataAdapter(sqq,conn);
           try
           {
               sdaa.Fill(dst);
               return dst;
           }
           catch (Exception ex)
           {
               throw new Exception(ex.Message);
           }
           finally
           {
               conn.Close();
           }
       }

--------------------编程问答-------------------- else //二级分类列表 
        { 
            this.DropDownList8.DataSource = dbb.Selectsubjct2(this.DropDownList1.SelectedValue.Substring(0,2)); 

调试一下,看这里什么数据,另外dropdownlist的runat="server"加没 --------------------编程问答-------------------- 调试看看数据是否存在,AutoPoatback是否为true,事件是否执行
这种方法不可取。
一般都用ajax实现无刷新三级联动
http://topic.csdn.net/u/20090709/12/9eefeb53-c4a6-4fd0-8c1b-1d3282627417.html --------------------编程问答-------------------- 看的太乱了 --------------------编程问答--------------------
引用 1 楼  的回复:
else //二级分类列表 
  { 
  this.DropDownList8.DataSource = dbb.Selectsubjct2(this.DropDownList1.SelectedValue.Substring(0,2)); 

调试一下,看这里什么数据,另外dropdownlist的runat="server"加没


不加runat="server",后台this不到的吧。。。

还是建议楼主用ajax做,这样你也不用考虑后台ispostback的问题了,我是用easyui的combobox做的

如果一定要用后台做的话,建议传个List<T>的值回来,绑定起来也方便
XXXX.Items.Add(0,new ListItem(List<T>.XX,List<T>.XX));
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,