表Auth_TB_Operator 有Id   Name字段
                        21   刘瑜晓
表OpRsk_TB_Department 有Id     Caption       ManagerID 字段
                           1     人力与行政办公       21其中Auth_TB_Operator的Id和OpRsk_TB_Department的ManagerID字段可以确定两个表的Name和Caption关系,现在有两个dropdownlist,第一个dropdownlist绑定Caption字段,第二个dropdownlist绑定Name字段,如何当第一个dropdownlist改变时,第二个dropdownlist也随着改变?

解决方案 »

  1.   

    在第一个dropdownlist的SelectedIndexChanged事件中,根据其SelectedValue查询对应的Name值,绑定到第二个dropdownlist上。
      

  2.   


    <script>
        function change(obj)
        {
            var select=document.getElementById('<%=DropDownList2.ClientID %>');
            for(var i=0;i<select.options.length;i++)
            {
                if(select.options[i].value==obj.value)
                    select.options[i].selected=true;
            }
        }
        </script><asp:DropDownList ID="DropDownList1" onchange="change(this);" runat="server">
            </asp:DropDownList>
            <asp:DropDownList ID="DropDownList2" runat="server">
            </asp:DropDownList>protected DataTable getDataTableOperator()
        {        System.Data.DataTable dt = new System.Data.DataTable();
            System.Data.DataRow dr;
            dt.Columns.Add(new System.Data.DataColumn("ID", typeof(System.Int32)));
            dt.Columns.Add(new System.Data.DataColumn("Name", typeof(System.String)));
            dr = dt.NewRow();
            dr[0] = 1;
            dr[1] = "小明";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr[0] = 2;
            dr[1] = "小强";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr[0] = 3;
            dr[1] = "小张";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr[0] = 4;
            dr[1] = "小李";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr[0] = 5;
            dr[1] = "小关";
            dt.Rows.Add(dr);
            return dt;
        }
        protected DataTable getDataTableDepartment()
        {        System.Data.DataTable dt = new System.Data.DataTable();
            System.Data.DataRow dr;
            dt.Columns.Add(new System.Data.DataColumn("ID", typeof(System.Int32)));
            dt.Columns.Add(new System.Data.DataColumn("Caption", typeof(System.String)));
            dt.Columns.Add(new System.Data.DataColumn("ManagerID", typeof(System.Int32)));
            dr = dt.NewRow();
            dr[0] = 1;
            dr[1] = "A";
            dr[2] = 1;
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr[0] = 2;
            dr[1] = "B";
            dr[2] = 1;
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr[0] = 3;
            dr[1] = "C";
            dr[2] = 1;
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr[0] = 4;
            dr[1] = "D";
            dr[2] = 2;
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr[0] = 5;
            dr[1] = "E";
            dr[2] = 2;
            dt.Rows.Add(dr);
            return dt;
        }    protected void Page_Load(object sender, EventArgs e)
        {
            DropDownList1.DataSource = getDataTableOperator();
            DropDownList1.DataTextField = "Name";
            DropDownList1.DataValueField = "ID";
            DropDownList1.DataBind();
            DropDownList2.DataSource = getDataTableDepartment();
            DropDownList2.DataTextField = "Caption";
            DropDownList2.DataValueField = "ID";
            DropDownList2.DataBind();
                }
      

  3.   

    http://www.51aspx.com/S/%E8%81%94%E5%8A%A8.html
      

  4.   

    其实主要是几条SQL语句
    2个DropDownList分别绑定2个表,
    在第一个DropDownList1中
    {.....
     this.DropDownList1.DataTextField=Caption;
     this.DropDownList1.DataValueField=Id;
    }
    在第二个DropDownList2中
    {.....
    Selelct name from Auth_TB_Operator where Id="+this.DropDownList1.SelectedValue"
    }
      

  5.   

    你可以这样做,我做了两个下拉菜单,当选择第一个菜单时,根据第一个菜单选择的内容初始化第二个菜单
    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
      Init()
    }
    private void Init()
    {
              string strSel = "select Name from Auth_TB_Operator where ID = " + this.DropDownList1.SelectedValue
    ;
    }
    其中第一个菜单 的this.DropDownList1.DataTextField = "Caption";
                    this.DropDownList1.DataValueField = "ManagerID";
      

  6.   

    [Quote=引用 7 楼 neu_dfh 的回复:]
    你可以这样做,我做了两个下拉菜单,当选择第一个菜单时,根据第一个菜单选择的内容初始化第二个菜单
    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
    Init()
    }
    private void Init()
    {
    string strSel = "select Name from Auth_TB_Operator where ID = " + this.DropDownList1.SelectedValue
    ;
    ....
    }
    在page_load里这样设置
     string strSel = "select Caption,ManagerID from  Auth_TB_Operator";                SqlCommand selcom = new SqlCommand(strSel, conn);
                    SqlDataAdapter da = new SqlDataAdapter();
                    da.SelectCommand = selcom;
                    DataSet ds = new DataSet();
                    da.Fill(ds, "option");                this.DropDownList1.DataSource = ds.Tables["option"].DefaultView;
                    this.DropDownList1.DataTextField = "Caption";
                    this.DropDownList1.DataValueField = "ManagerID";
                    this.DropDownList1.DataBind();
      

  7.   

    在第一个dropdownlist的SelectedIndexChanged事件中,根据其SelectedValue查询对应的Name值,绑定到第二个dropdownlist上。
    正解!
      

  8.   

    頂一下,在第一個dropdownlist中綁定顯示第二個對應的Name值
      

  9.   

    上面多說對了  不過有些地方還是注意點 
    比喻說:
    你要是用asp.net中的DropDownList的話代碼全部寫在.cs裡面你就要打開第一個DropDownList的AutoPostBack屬性,方能實現連動,如果還要不刷新,ajax 控件的UpdatePanel 記住一定先將ScriptManager控件加上 用javascirpt就不說了 簡單了點
      

  10.   

    一楼可以,二楼的也行,
    不过二楼的方法在后台取得数据时要用this.Request.Form.Get("控件ID")获取数据,不能用this.DropDownList1.SelectedValue获取数据