DEV ASPxGridView前端绑定数据,后端动态改变查询条件在使用过滤和统计功能时数据变为初始状态时的数据的解决方法

问题描述:前端绑定aspxgridview数据,后端动态改变查询条件,能抓取数据并显示到前端,但是在使用过滤和统计功能时,数据变为初始状态时的数据。
解决方法:采用设计时前端使用数据源控件取数据创建aspxgridview,主要为设计快速,设计结束时,将前端数据源控件代码屏蔽,然后为aspxgridview创建后台的load事件,为aspxgridview创建全局datatable,在load事件中设置datasource为全局datatable,并绑定之,此事件在每次刷新页面、排序、过滤、统计、查询时都会调用,然后为aspxgridview 创建customcallback事件,并通过该事件的e.Parameters来接收前端传来的参数,该参数可为单个,如果前端需要传递多个参数时,当使用组合字符串传之,且在后台接收后使用split进行分隔为多个参数,此事件在前端改变查询条件进行后台查询时会用到,不能使用ajax,在customcallback事件中处理复杂查询,并将查询结果存入全局datatable中,并在customcallback事件中进行:datasource、databind()设置,此时前端就可以显示查询后的数据了,当使用过滤、统计等功能时,aspxgridview会调用load事件,此时load事件中的全局datatable就会采用查询后的结果,从而完成动态改变数据源的效果。
附前端和后端代码:

后端设置全局变量:用于表格数据源

        public static DataTable temp_dt1;
     

后端页面事件:


 protected void Page_Load(object sender, EventArgs e)
        {
            ASPxGridView1.SettingsFilterControl.ViewMode = FilterControlViewMode.VisualAndText;
            ASPxGridView1.SettingsFilterControl.AllowHierarchicalColumns = true;
            ASPxGridView1.SettingsFilterControl.ShowAllDataSourceColumns = true;
           //下列代码:自动列宽
            if (!IsPostBack)
            {
                temp_dt1 =SqlHelper.ExecuteDataTable("select * from 业务数据 where 1<>1",new SqlParameter[]{});
                 DevGridView_AutoColumnWidth.auto_col_width(ASPxGridView1, num_columns, date_columns, datetime_columns);
               }
         }
 protected void ASPxGridView1_CustomCallback(object sender, DevExpress.Web.ASPxGridViewCustomCallbackEventArgs e)
          {
              string parameters_list = e.Parameters;
              if (parameters_list != "reset")
              {
                  string[] para_string_array = parameters_list.Split(',');
                  string khmc_str = para_string_array[0].ToString().Trim();
                  string nd_str = para_string_array[1].ToString().Trim();
                  string sl_str = para_string_array[2].ToString().Trim();
                  string sf_str = para_string_array[3].ToString().Trim();
                  string cxtj_str = "";
                  if (!string.IsNullOrEmpty(khmc_str) || !string.IsNullOrEmpty(nd_str) || !string.IsNullOrEmpty(sl_str) || !string.IsNullOrEmpty(sf_str))
                  {
                      cxtj_str = " and " + (string.IsNullOrEmpty(khmc_str) ? "" : " 客户简称='" + khmc_str + "'") + (string.IsNullOrEmpty(nd_str) ? "" : " and 年度='" + nd_str + "'") + (string.IsNullOrEmpty(sl_str) ? "" : " and 税率=" + sl_str) + (string.IsNullOrEmpty(sf_str) ? "" : " and 收付='" + sf_str + "'");
                  }
                  
                  
                  temp_dt1 = SqlHelper.ExecuteDataTable("select * from 业务数据 where  (对帐单='' or 对帐单 is null)" + cxtj_str, new SqlParameter[] { });
                  ASPxGridView1.DataSource = temp_dt1;
                  ASPxGridView1.DataBind();
              }
              else
              {
                  
                  temp_dt1 = SqlHelper.ExecuteDataTable("select * from 业务数据 where 1<>1", new SqlParameter[] { });
                  ASPxGridView1.DataSource = temp_dt1;
                  ASPxGridView1.DataBind();
               }
              
          }
 protected void ASPxGridView1_Load(object sender, EventArgs e)
          {
              ASPxGridView1.DataSource = temp_dt1;
              ASPxGridView1.DataBind();
          }

前端js代码:

 function khmc_combo_SelectedIndexChanged(s, e) {
                var khmc_str = khmc_combo.GetText().trim();
                var nd_str = nd_combo.GetText().trim();
                var sl_str = sl_combo.GetText().trim();
                var sf_str = sf_combo.GetText().trim();
                var cxtj_str=khmc_str+","+nd_str+","+sl_str+","+sf_str
                ASPxGridView1.PerformCallback(cxtj_str);
 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值