.net 多个ASPxComboBox控件实现联动查询功能

由于项目需求,需要在三个ASPxComboBox控件实现联动查询,前一个控件的数据源决定后一个控件的数据源,并且后一个控件的选项会随前一个控件选中值的变化而变化。在这里插入图片描述
我们先编写前台界面功能代码

<table>
            <tr>
                <td>部门:</td>
                <td>
                    <dx:ASPxComboBox ID="cb_dept" runat="server" ValueType="System.String" 
           Width="120px">
       <ClientSideEvents SelectedIndexChanged="function(s, e) {
	main.PerformCallback(s.GetValue());
            }" />
                </dx:ASPxComboBox>
                </td>
                <td>
                    班组:
                </td>
                <td>
                    <dx:ASPxComboBox ID="Team" runat="server" ClientInstanceName="main" ValueType="System.String" OnCallback="Team_Callback">
                        <ClientSideEvents SelectedIndexChanged="function(s, e) {
	son.PerformCallback(s.GetValue());
            }" />
                    </dx:ASPxComboBox>
                </td>
                <td>岗位:</td>
                <td>
                    <dx:ASPxComboBox ID="jobs" runat="server" ClientInstanceName="son" ValueType="System.String" OnCallback="jobs_Callback">
                      
                    </dx:ASPxComboBox>    
                </td>
               <td>
                   <dx:ASPxButton ID="ASPxButton1" runat="server" Text="查询" AutoPostBack="false">
                       <ClientSideEvents click="function(s,e){
                           grid.Refresh();
                           }
                           "/>
                   </dx:ASPxButton>

               </td>
             </tr>
        </table>

s.GetValue()用于获取部门ASPxComboBox控件选中的值,main.PerformCallback(s.GetValue())则表示班组ASPxComboBox控件将s.GetValue()取到的值从客户端传递到服务端,而son.PerformCallback(s.GetValue())也是同理。
另外,两个子级控件都需要添加回调函数事件,否则无法实现联动查询。
在这里插入图片描述
编写完前台代码,现在我们开始写后台代码。

using DevExpress.Web.ASPxEditors;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class Pro_EAM_SBWH_2_Code_2_Select : System.Web.UI.Page
{
    Sys.APP_User currentUser = new Sys.APP_User();
    Sys.OraDataBase data = new Sys.OraDataBase();
    protected void Page_Load(object sender, EventArgs e)
    {
       
        currentUser = new Sys.APP_User(this.Context.User.Identity.Name);
        
        if (!IsPostBack)
        {
            cb_dept_bind();
            Team_bind(cb_dept.Value.ToString());
            Team.SelectedIndex = 0;
            jobs_bind(Team.Value.ToString());
            jobs.SelectedIndex = 0;
        }
    }

    /// <summary>
    /// 部门下拉框绑定
    /// </summary>
    public void cb_dept_bind()
    {
        string sql = @"select 
       a.id,
       a.name
  from  dept a
 where a.status=0
 order by nvl(a.attribute4, 9999), a.dept_name
";
        DataSet ds=data.GetDataSet(sql);
        cb_dept.Items.Clear();
        for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
        {
            cb_dept.Items.Add(new ListEditItem(ds.Tables[0].Rows[i]["name"].ToString(), ds.Tables[0].Rows[i]["id"].ToString()));
        }
        cb_dept.Value = currentUser.dept_id;
    }


    /// <summary>
    /// 班组下拉框绑定
    /// </summary>
    public void Team_bind(string dept_id)
    {
        string sql = @"select 
     Name,id
  from  team t,dept d
 where t.status!=3 and t.dept_Id=d.dept_Id
 and d.dept_Id='" + dept_id + "'";
        DataSet ds = data.GetDataSet(sql);
        Team.Items.Clear();
        for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
        {
            Team.Items.Add(new ListEditItem(ds.Tables[0].Rows[i]["Name"].ToString(), ds.Tables[0].Rows[i]["ID"].ToString()));
        }
    }

    /// <summary>
    /// 岗位下拉框数据绑定
    /// </summary>
    private void jobs_bind( string team_id)
    {
        string sql = @"Select Name,ID
  From Posts 
   where Team_Id='" + team_id + "'";
        DataSet ds = data.GetDataSet(sql);
        jobs.Items.Clear();
        for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
        {
            jobs.Items.Add(new ListEditItem(ds.Tables[0].Rows[i]["Name"].ToString(),ds.Tables[0].Rows[i]["Id"].ToString()));
        }
        
    }


    protected void jobs_Callback(object sender, DevExpress.Web.ASPxClasses.CallbackEventArgsBase e)
    {
        jobs_bind(e.Parameter);
    }
    protected void Team_Callback(object sender, DevExpress.Web.ASPxClasses.CallbackEventArgsBase e)
    {
        Team_bind(e.Parameter);
    }
}

两个子级ASPxComboBox控件的绑定采用了带参方法,用于接收前台传递过来的参数,他们的查询语句的条件都是根据各自父级控件的选中值(即参数)来查询,再进行数据的动态绑定,而两个回调函数事件则将前台传递过来的值传递给相应的方法。

总结:多个ASPxComboBox控件之间的联动查询无非是各个ASPxComboBox控件数据的动态绑定,查询语句的条件需要父级ASPxComboBox控件选中值来动态改变。**这个本质就是前台传值给后台,后台事件再进行传参调用方法。**整个写下来可能会有点绕,但梳理一下便能明白其中的逻辑,希望能对各位有所帮助!

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 岁月 设计师:pinMode 返回首页