当我点大类的时候,如果这个大类里有小类的话,小类下拉框激活。在不类框中显示大类的小类列表,如果没有小类不激活。
代码如下。数据库都写好了,就是不知道怎么让这两个下拉框互联起来。。protected void Page_Load(object sender, EventArgs e)
    {
        OleDbConnection connstr = DBConnections.DBConnections.createConnection();
        connstr.Open();        OleDbCommand cmd = new OleDbCommand();
        cmd.Connection = connstr;
        cmd.CommandText = "SELECT [BigID], [BigClassName] FROM [Hover_BigClass_New]";        DataSet daset = new DataSet();
        OleDbDataAdapter ol = new OleDbDataAdapter();
        ol.SelectCommand = cmd;
        ol.Fill(daset);        if (daset.Tables.Count > 0)
        {
            if (daset.Tables[0].Rows.Count > 0)
            {
                ClassNews.Enabled = true;
                ClassNews.AutoPostBack = true;
                ClassNews.DataSource = daset;
                ClassNews.DataTextField = "BigClassName";
                ClassNews.DataValueField = "BigID";
                ClassNews.DataBind();
                if(Request["BigClassName"].ToString()!=null)
                {
                    ////////////小类
                    String BigClassNames = Request["BigClassName"].ToString();
                    OleDbCommand cmd1 = new OleDbCommand();
                    cmd1.Connection = connstr;
                    cmd1.CommandText = "Select * From Hover_SmallClass_New where BigClassName='" + BigClassNames + "'";                    DataSet ds1 = new DataSet();
                    OleDbDataAdapter dsda = new OleDbDataAdapter();
                    dsda.SelectCommand = cmd1;
                    dsda.Fill(ds1);                    if (ds1.Tables.Count > 0)
                    {
                        if (ds1.Tables[0].Rows.Count > 0)
                        {
                            SmallClassNews.DataSource = ds1;
                            SmallClassNews.Enabled = true;
                            SmallClassNews.DataTextField = "SmallClassName";
                            SmallClassNews.DataValueField = "SmallClassID";
                            SmallClassNews.DataBind();
                        }
                        else
                        {
                            SmallClassNews.Enabled = false;
                        }
                    }
                    else
                    {
                        SmallClassNews.Enabled = false;
                    }
                    ds1.Dispose();
                    ds1 = null;
          ///////////小类结束
                }
                
            }
            else
            {
                ClassNews.Enabled = false;
            }
        }
        else
        {
            ClassNews.Enabled = false;
        }        ol.Dispose();
        ol = null;        connstr.Close();    }
以下是前台代码
        <asp:DropDownList ID="ClassNews" runat="server" Height="23px" Width="86px">
        </asp:DropDownList>
 
         <asp:DropDownList ID="SmallClassNews" runat="server" Height="23px" Width="86px">
        </asp:DropDownList>

解决方案 »

  1.   

    可以在ClassNews控制里,在其SelectIndexChaned事件下编写实现控件联动操作的代码!
    for sample:
    protected void ClassNews_SelectedIndexChanged(object sender ,EventArgs e)
    {
    //小类code(引用你自己写的)
                  String BigClassNames = Request["BigClassName"].ToString(); 
                        OleDbCommand cmd1 = new OleDbCommand(); 
                        cmd1.Connection = connstr; 
                        cmd1.CommandText = "Select * From Hover_SmallClass_New where BigClassName='" + BigClassNames + "'";                     DataSet ds1 = new DataSet(); 
                        OleDbDataAdapter dsda = new OleDbDataAdapter(); 
                        dsda.SelectCommand = cmd1; 
                        dsda.Fill(ds1);                     if (ds1.Tables.Count > 0) 
                        { 
                            if (ds1.Tables[0].Rows.Count > 0) 
                            { 
                                SmallClassNews.DataSource = ds1; 
                                SmallClassNews.Enabled = true; 
                                SmallClassNews.DataTextField = "SmallClassName"; 
                                SmallClassNews.DataValueField = "SmallClassID"; 
                                SmallClassNews.DataBind(); 
                            } 
                            else 
                            { 
                                SmallClassNews.Enabled = false; 
                            } 
                        } 
                        else 
                        { 
                            SmallClassNews.Enabled = false; 
                        } 
                        ds1.Dispose(); 
                        ds1 = null; 
    }
      

  2.   

    拖一个updatepanel然后用dropdownlist中的selectedchanged事件。
      

  3.   

    如以下示例:protected void Page_Load(object sender, EventArgs e)
        {
            connstr = System.Configuration.ConfigurationSettings.AppSettings["sql2005"];
            if (!IsPostBack)
            {
                SelectedVisible("allFalse");
            }
        }    /// <summary>
        /// 选择控件可见与否
        /// </summary>
        /// <param name="temp">传递的参数控制显示什么</param>
        private void SelectedVisible(string temp)
        {
            if (temp.Equals("allFalse"))
            {
                lblname.Visible = false;
                ddlRname.Visible = false;
            }
            else if (temp.Equals("RnameVisible"))
            {
                lblname.Visible = true;
                ddlRname.Visible = true;
            }
        }
    protected void ddlRname_SelectedIndexChanged(object sender, EventArgs e)
        {
            pt = new string[16];
            for (int i = 0; i < 16; i++)
            {
                pt[i] = "&nbsp;";
            }
            if (ddlRtype.SelectedValue.ToString().Equals("1"))
            {
                //绑定小类1
            }
            else if (ddlRtype.SelectedValue.ToString().Equals("2"))
            {
                //绑定小类2
            }
            else if (ddlRtype.SelectedValue.ToString().Equals("3"))
            {
                //绑定小类3
            }
            else
            {
                //绑定小类4
            }
        }    protected void ddlRtype_SelectedIndexChanged(object sender, EventArgs e)
        {
            SelectedVisible("allFalse");
            ddlRname.Items.Clear();
            ddlRname.Items.Add(new ListItem("---请选择---", "-1"));
            if (ddlRtype.SelectedValue.ToString().Equals("1"))
            {
                (new SqlDataAccess(connstr)).ConnectDDL("SELECT sid, id, name, type FROM ZCityIdToName ORDER BY id", "ZCityIdToName", "name", "id", ddlRname);
                SelectedVisible("RnameVisible");
            }
            else if (ddlRtype.SelectedValue.ToString().Equals("2"))
            {
                (new SqlDataAccess(connstr)).ConnectDDL("SELECT sid, id, name, type FROM ZCityIdToName ORDER BY id", "ZCityIdToName", "name", "id", ddlRname);
                SelectedVisible("RnameVisible");
            }
            else if (ddlRtype.SelectedValue.ToString().Equals("3"))
            {
                (new SqlDataAccess(connstr)).ConnectDDL("SELECT sid, id, name, type FROM ZCityIdToName ORDER BY id", "ZCityIdToName", "name", "id", ddlRname);
                SelectedVisible("RnameVisible");
            }
            else
            {
                SelectedVisible("allFalse");
            }
        }
      

  4.   

    以下是前台代码 
            <asp:DropDownList ID="ClassNews" runat="server" Height="23px" Width="86px"> 
            </asp:DropDownList>           <asp:DropDownList ID="SmallClassNews" runat="server" Height="23px" Width="86px"> 
            </asp:DropDownList> 
    ==============================
    SmallClassNews要根据ClassNews选中显示
    那么第一次在pageload 先绑定 ClassNews
    然后在ClassNews的selectchanged 事件里面根据 ClassNews选中的项再读取数据出来 再绑定到SmallClassNews ,之前 先把ClassNews 的autopostback属性设置为true
      

  5.   

     发现一个问题,如果用SelectIndexChaned事件,它整个页面就会刷新一次,我里边有一个HTML编辑器,刷新起来很不顺,
    有什么解决方法没有...
      

  6.   

    using System;
    using System.Collections;
    using System.Configuration;
    using System.Data;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Linq;
    using System.Data.OleDb;public partial class admins_addnew : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                showBigData();
                showData();
            }
        }    protected void Button1_Click(object sender, EventArgs e)
        {
            this.Label1.Text = this.HtmlEditor1.Text;
            
        }    public void showBigData()
        {
            OleDbConnection connstr = DBConnections.DBConnections.createConnection();
            connstr.Open();        OleDbCommand cmd = new OleDbCommand();
            cmd.Connection = connstr;
            cmd.CommandText = "SELECT BigID, BigClassName FROM Hover_BigClass_New";        DataSet daset = new DataSet();
            OleDbDataAdapter ol = new OleDbDataAdapter();
            ol.SelectCommand = cmd;
            ol.Fill(daset);        if (daset.Tables.Count > 0)
            {
                if (daset.Tables[0].Rows.Count > 0)
                {
                    ClassNews.Enabled = true;
                    ClassNews.AutoPostBack = true;
                    ClassNews.DataSource = daset;
                    ClassNews.DataTextField = "BigClassName";
                    ClassNews.DataValueField = "BigID";
                    ClassNews.DataBind();
                    if (Request.QueryString["BigClassName"] != null)
                        if (ClassNews.Items.FindByValue(Request.QueryString["BigClassName"].ToString()) != null)
                            ClassNews.Items.FindByValue(Request.QueryString["BigClassName"].ToString()).Selected = true;            }
                else
                {
                    ClassNews.Enabled = false;
                }
            }
            else
            {
                ClassNews.Enabled = false;
            }        ol.Dispose();
            ol = null;        connstr.Close();
        }
        public void showData()
        {
            //小类code(引用你自己写的) 
            OleDbConnection connstr = DBConnections.DBConnections.createConnection();
            connstr.Open();        String BigClassNames = Convert.ToString(ClassNews.SelectedItem.Value);
            OleDbCommand cmd1 = new OleDbCommand();
            cmd1.Connection = connstr;
            cmd1.CommandText = "Select SmallClassID,SmallClassName,BigClassName From Hover_SmallClass_New where BigClassName='" + BigClassNames + "'";        DataSet ds1 = new DataSet();
            OleDbDataAdapter dsda = new OleDbDataAdapter();
            dsda.SelectCommand = cmd1;
            dsda.Fill(ds1);        if (ds1.Tables.Count > 0)
            {
                if (ds1.Tables[0].Rows.Count > 0)
                {
                    SmallClassNews.DataSource = ds1;
                    ClassNews.AutoPostBack = true;
                    SmallClassNews.Enabled = true;
                    SmallClassNews.DataTextField = "SmallClassName";
                    SmallClassNews.DataValueField = "SmallClassID";
                    SmallClassNews.DataBind();
                    if (Request.QueryString["BigClassName"] != null)
                        if (SmallClassNews.Items.FindByValue(Request.QueryString["BigClassName"].ToString()) != null)
                            SmallClassNews.Items.FindByValue(Request.QueryString["BigClassName"].ToString()).Selected = true;
                }
                else
                {
                    SmallClassNews.Enabled = false;
                }
            }
            else
            {
                SmallClassNews.Enabled = false;
            }
            ds1.Dispose();
            ds1 = null;
        }    protected void SmallClassNews_SelectedIndexChanged(object sender, EventArgs e)
        {
            showData();
        }    protected void ClassNews_SelectedIndexChanged(object sender, EventArgs e)
        {
            showBigData();
        }
    }为什么在前台页面点大类,刷新后没有跳到相应的大类上,还是出现列表第一条数据.小类也没有数据???????????????
      

  7.   

    回答过了啊。。想要联动,最好使用AJAX来做。。在.net中最简单的办法就是用updatePanel..什么都不用干。。效果一样。。
      

  8.   

    想不刷新使用ajaxpro框架也可以
      

  9.   

    很明显给楼主介绍使用Ajax是没用的,呵呵。这样:vs 2003 -- >
            <asp:DropDownList ID="ClassNews" runat="server" Height="23px" Width="86px" AutoPostBack="True" SelectedIndexChanged = "ClassNews_SelectedIndexChanged"> 
            </asp:DropDownList> vs 2005<asp:DropDownList ID="ClassNews" runat="server" Height="23px" Width="86px" AutoPostBack="True"  OnSelectedIndexChanged="ClassNews_SelectedIndexChanged"> 
            </asp:DropDownList>           <asp:DropDownList ID="SmallClassNews" runat="server" Height="23px" Width="86px"> 
            </asp:DropDownList> private void bindtopDL()
    {
        OleDbConnection connstr = DBConnections.DBConnections.createConnection(); 
        connstr.Open();     OleDbCommand cmd = new OleDbCommand(); 
        cmd.Connection = connstr; 
        cmd.CommandText = "SELECT [BigID], [BigClassName] FROM [Hover_BigClass_New]"; 
        DataSet daset = new DataSet(); 
        OleDbDataAdapter ol = new OleDbDataAdapter(); 
        ol.SelectCommand = cmd; 
        ol.Fill(daset);     if (daset.Tables[0].Rows.Count > 0) 
        { 
            ClassNews.AutoPostBack = true;
            ClassNews.DataSource = daset; 
            ClassNews.DataTextField = "BigClassName"; 
            ClassNews.DataValueField = "BigID"; 
            ClassNews.DataBind(); 
        }
        else
        {
            ClassNews.AutoPostBack = false;
        }
    }private void bindsubDL()
    {
        if (this.BigClassName.SelectedItem.value != "")
        { 
           OleDbCommand cmd1 = new OleDbCommand(); 
           cmd1.Connection = connstr; 
           cmd1.CommandText = "Select * From Hover_SmallClass_New where BigClassName='" +this.BigClassName.SelectedItem.value+ "'";        DataSet ds1 = new DataSet(); 
           OleDbDataAdapter dsda = new OleDbDataAdapter(); 
           dsda.SelectCommand = cmd1; 
           dsda.Fill(ds1);        if (ds1.Tables[0].Rows.Count > 0) 
           { 
               SmallClassNews.Enabled = true; 
               SmallClassNews.DataSource = ds1; 
               SmallClassNews.DataTextField = "SmallClassName"; 
               SmallClassNews.DataValueField = "SmallClassID"; 
               SmallClassNews.DataBind(); 
           }
           else
           {
               SmallClassNews.Enabled = false; 
           }
    }
    protected void Page_Load(object sender, EventArgs e) 
    {
         this.bindtopDL();
         this.bindsubDL();
    }
    protected void ClassNews_SelectedIndexChanged(object sender,System.EventArgs e)
    {
         this.bindsubDL();
    }
      

  10.   

    最讨厌动不动就搬ajax出来的人!
    一点技术含量都没有!
      

  11.   

    建议楼住使用iframe把下拉放在一个单独的页面中
    用到的时候
    var ddl1_va = window.frames[0].document.getElementById("ddl1");
    将ddl1_va赋给一个hidden控件即可
      

  12.   

    march22 和lfywy 的思路还可以,不过还是要刷新的.updatePanel没有用过.不知道怎么用?晚上查一下资料.....
      

  13.   

    用微軟的updatepanel 做聯動不是很好 dropdown選擇的時候 頁面或有閃爍,雖然不刷最好是自己寫ajax 比如使用ajax.dll 或是jquery
      

  14.   

    呵呵 已经这么多人回答了 用updatePanel没错了   双手同意.....updatePanel
      

  15.   

    我用updatePanel解决了刷新问题,只要是回答的根我的问题有关系,根据实际情况都会给分,谢谢你们,不过还有一个问题,
    当我选大类列表其他项的时候,并没有停在选中的那一项,而是又回到了大类列表的第一项数据那,比如,大类有,AA,BB,CC
    我点了BB,但是列表没有停在BB上,而是又回到了AA.....怎么解决这个问题...
    代码如下:
     protected void Page_Load(object sender, EventArgs e)
        {
            this.bindtopDL();
            this.bindsubDL();
           
        } 
        private void bindtopDL() 
        { 
            OleDbConnection connstr = DBConnections.DBConnections.createConnection(); 
            connstr.Open();         OleDbCommand cmd = new OleDbCommand(); 
            cmd.Connection = connstr;
            cmd.CommandText = "SELECT * FROM [Hover_BigClass_New]"; 
            DataSet daset = new DataSet(); 
            OleDbDataAdapter ol = new OleDbDataAdapter(); 
            ol.SelectCommand = cmd; 
            ol.Fill(daset);         if (daset.Tables[0].Rows.Count > 0) 
            { 
                ClassNews.AutoPostBack = true; 
                ClassNews.DataSource = daset; 
                ClassNews.DataTextField = "BigClassName";
                ClassNews.DataValueField = "BigClassID"; 
                ClassNews.DataBind();
     
            } 
            else 
            { 
                ClassNews.AutoPostBack = false; 
            }
            ol.Dispose();
            ol = null;
            connstr.Close();
        }    private void bindsubDL()
        {
            if (this.ClassNews.SelectedItem.ToString() != "")
            {
                OleDbConnection connstr = DBConnections.DBConnections.createConnection();
                connstr.Open();             OleDbCommand cmd1 = new OleDbCommand();
                cmd1.Connection = connstr;
                cmd1.CommandText = "Select * From Hover_SmallClass_New where BigClassName='" + ClassNews.SelectedItem.ToString() + "'";            DataSet ds1 = new DataSet();
                OleDbDataAdapter dsda = new OleDbDataAdapter();
                dsda.SelectCommand = cmd1;
                dsda.Fill(ds1);            if (ds1.Tables[0].Rows.Count > 0)
                {
                    SmallClassNews.Enabled = true;
                    SmallClassNews.DataSource = ds1;
                    SmallClassNews.DataTextField = "SmallClassName";
                    SmallClassNews.DataValueField = "SmallClassID";
                    SmallClassNews.DataBind();
               
                }
                else
                {
                    SmallClassNews.Enabled = false;
                }
                ds1.Dispose();
                ds1 = null;
                connstr.Close();
            }
        }    protected void ClassNews_SelectedIndexChanged(object sender,System.EventArgs e) 
        { 
            this.bindsubDL(); 
        }
      

  16.   

    if (dataSet.Tables[0].Rows.Count > 0)
                    {
                        DropDownList3.Enabled = true;
                        ImageButton1.Enabled = true;
                        Label1.Text = "";
                        DropDownList3.DataSource = dataSet;
                        DropDownList3.DataTextField = "textfield";
                        DropDownList3.DataValueField = "id";
                        DropDownList3.DataBind();
                        if(Request.QueryString["chubanshe"]!=null)
                            if (DropDownList3.Items.FindByValue(Request.QueryString["chubanshe"].ToString()) != null)
                                DropDownList3.Items.FindByValue(Request.QueryString["chubanshe"].ToString()).Selected = true;                }//如果含有记录就说明有新的数据
                    else
                    {
                        Label1.Text = "当前年级的所选学科暂时没有内容,<a href='addleibie.aspx'>去添加学科内容>></a>";
                        DropDownList3.Enabled = false;
                        ImageButton1.Enabled = false;
                    }
    这是别人的代码,但是那几句我并没有看懂,希望能找到一个解决的方法
      

  17.   

    先写2个事件
    drop1_selectedChaning() 大类的
    drop2_....()小类的
    第1个大类的直接绑定数据库
    第2个小类的把drop1.selecedValue值传到第2个小类的数据库源上
    在大类的changing事件里调用小类的changing 就可以了就会显示在你选大类时小类自动绑定了.
      

  18.   

    问题解决,附上代码,前台
    <form id="form1" runat="server">
        <div>
        
            <asp:ScriptManager ID="ScriptManager1" runat="server">
            </asp:ScriptManager>
            <asp:UpdatePanel ID="UpdatePanel1" runat="server">
              <Triggers>
            <asp:AsyncPostBackTrigger ControlID="ClassNews" EventName="SelectedIndexChanged" />
            </Triggers>
            <ContentTemplate>
                       <fieldset>
                         <legend></legend>
          
            
            
            新闻标题<asp:TextBox ID="title" runat="server"></asp:TextBox>
            <br />
            <br />
            新闻类别  
            
           
            <asp:DropDownList ID="ClassNews" runat="server" Height="23px" Width="86px" 
                AutoPostBack="True" OnSelectedIndexChanged="ClassNews_SelectedIndexChanged">
            </asp:DropDownList>
     
             <asp:DropDownList ID="SmallClassNews" runat="server" Height="23px" Width="86px">
            </asp:DropDownList>
            &nbsp;&nbsp; 
            <br />        <br />
            
            <br />
            <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
            <br />
            <br />
            <asp:Label ID="Label3" runat="server" Text="Label"></asp:Label>
                 </fieldset>
                </ContentTemplate>
            </asp:UpdatePanel>
             新闻内容
             <cc1:HtmlEditor ID="HtmlEditor1" runat="server"  TF_EditHtml="1" TF_UpTu="1" ResourcesPath="HtmlEditor"  />        <br />
            <br />
           
            <br />
            <br />
            发布人<asp:TextBox ID="person" runat="server"></asp:TextBox>
            <br />
            <br />
            摘录网址<asp:TextBox ID="zWeb" runat="server"></asp:TextBox>
            <br />
            <br />
            录入时间<asp:TextBox ID="time" runat="server"></asp:TextBox>
            <br />
            <br />
            <br />
            <asp:Button ID="Button1" runat="server" Text="提交" onclick="Button1_Click" />
        
            <br />
            <br />
            <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
            
            
            
        
            
        
        </div>
        </form>
    后台代码
    public partial class admins_addnew : System.Web.UI.Page
    {
        
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
           
            this.bindtopDL();
            this.bindsubDL();
            }
        } 
        private void bindtopDL() 
        { 
            OleDbConnection connstr = DBConnections.DBConnections.createConnection(); 
            connstr.Open();         OleDbCommand cmd = new OleDbCommand(); 
            cmd.Connection = connstr;
            cmd.CommandText = "SELECT * FROM [Hover_BigClass_New]"; 
            DataSet daset = new DataSet(); 
            OleDbDataAdapter ol = new OleDbDataAdapter(); 
            ol.SelectCommand = cmd; 
            ol.Fill(daset);         if (daset.Tables[0].Rows.Count > 0) 
            { 
                ClassNews.AutoPostBack = true; 
                ClassNews.DataSource = daset; 
                ClassNews.DataTextField = "BigClassName";
                ClassNews.DataValueField = "BigClassID"; 
                ClassNews.DataBind();
     
            } 
            else 
            { 
                ClassNews.AutoPostBack = false; 
            }
            ol.Dispose();
            ol = null;
            connstr.Close();
        }    private void bindsubDL()
        {
            if (this.ClassNews.SelectedItem.ToString() != "")
            {
                OleDbConnection connstr = DBConnections.DBConnections.createConnection();
                connstr.Open();            OleDbCommand cmd1 = new OleDbCommand();
                cmd1.Connection = connstr;
                cmd1.CommandText = "Select * From Hover_SmallClass_New where BigClassName='" + ClassNews.SelectedItem.ToString() + "'";            DataSet ds1 = new DataSet();
                OleDbDataAdapter dsda = new OleDbDataAdapter();
                dsda.SelectCommand = cmd1;
                dsda.Fill(ds1);            if (ds1.Tables[0].Rows.Count > 0)
                {
                    
                    SmallClassNews.Enabled = true;
                    SmallClassNews.DataSource = ds1;
                    SmallClassNews.DataTextField = "SmallClassName";
                    SmallClassNews.DataValueField = "SmallClassID";
                    SmallClassNews.DataBind();            }
                else
                {
                    SmallClassNews.Enabled = false;
                    
                }
                ds1.Dispose();
                ds1 = null;
                connstr.Close();
            }
            else
            {
                
                SmallClassNews.Enabled = false;
            }
        }    protected void ClassNews_SelectedIndexChanged(object sender,System.EventArgs e) 
        { 
            this.bindsubDL(); 
        }
      

  19.   

    也可以用JS来秦无刷新二级联动呀,用ASP.NET的回调接口,效果还不错,正在使用中,跟AJAX思想一样