关于实现搜索、排序问题

来源:互联网 发布:数据库缺省值 编辑:程序博客网 时间:2024/05/01 07:40

今天在调试系统的时候才发现,在实现搜索功能的时候,你若将搜索结果放到一个DataGrid中,若DataGrid出现了分页的情况,而你还是按照一般情况(从数据库中或XML中检索出数据,再对DataGrid进行绑定),那结果就会和你自己想象的不一样。

原因:在你触发DataGrid的PageIndexChanged事件时,DataGrid的数据源还是重新从数据库中检索出来的,而实际上呢,DataGrid的数据源因该是你搜索出来的结果集。

解决办法呢,就是在搜索出结果的时候,你需要把数据源存放到一个Session里面,然后在对DataGrid绑定的时候,你就需要将DataGrid的数据源设置成搜索出来的结果集的数据源,这样的话,你在触发分页事件后,他的结果才会和你想象的一样。

在这还有一个问题就是,如何处理对不是搜索结果的结果集,即你没有搜索的时候,需要将数据绑定到DataGrid中。
这样可按如下办法解决:你把数据集直接都存放在一个Session中,即在页面加载的时候,你就将数据集存放在Session中,而在搜索的时候,你就简单得修改Session值,这样的话,在DataGrid绑定的时候,你就可以统一用该Session作为数据源。

//该方法就是实现了DataGrid的绑定,其中Session["SearchSource"]就是DataGrid的数据源
   //
Session值只有在Session为空和搜索的时候改变,若你还实现了对数据源的添加,修改,删除
   //那你还需再从新设置Session值,可直接将该Session值设为空,然后调用BindClassGrid函数;
private void BindClassGrid ()
{
    
if ( Session["SearchSource"!= null )
    
{
    }

    
else
    
{
           
// this.CreateDataSource()实现了从数据库中检索数据
        Session["SearchSource"= this.CreateDataSource(); 
    }

    
this.DataGrid1.DataSource = Session["SearchSource"];
    
this.DataGrid1.DataBind ();
}
 

在搜索的时候,你需要将Session值,重新赋值,即搜索出来的结果集,这样的话,在你PageIndexChanged的时候才不会出现结果不一致的问题;

对于对DataGrid排序问题,也是因为数据源不一致的问题,即搜索结果和排序结果集不一致问题,解决办法还是按照上面的方法,将结果集统一存放到一个Session中。
//Session[“SearchSource”]就是存放结果集的,该方法实现的就是DataGrid的排序
private void DataGrid1_SortCommand(object source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e)
{
    
//DataView dv = new DataView ( this.CreateDataGridDatasource() );

    DataTable dt 
= ( DataTable ) Session["SearchSource"] ;
    DataView dv 
= new DataView ( dt );
            
    
if ( ViewState["OrderBy"== null )
    
{
        ViewState[
"OrderBy"= "desc";
    }

    
else
    
{
        
if ( (string) ViewState["OrderBy"== "asc" )
            ViewState[
"OrderBy"= "desc";
        
else
            ViewState[
"OrderBy"= "asc";
    }

    dv.Sort 
= e.SortExpression.ToString() + " " + ViewState["OrderBy"].ToString();
    
this.DataGrid1.DataSource = dv;
    
this.DataGrid1.DataBind ();
}

用这样的办法,就可以解决数据源的不一致问题。

鉴于个人语言表达能力局限,不清楚处,还望大家多多指教。
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 国际机票名字错一个字怎么办 国际机票名字拼音错了怎么办 订机票名字写错了怎么办 亚航机票护照号写错怎么办 打发过了的奶油怎么办? 孩子生了没人带怎么办 办理退休审核未通过怎么办 整天沉迷全民k歌怎么办 吃鸡账号被误封了怎么办 手机换号了银行卡怎么办 评副高没有病房论文怎么办 收件人姓名写错了怎么办 汇款姓名写错了怎么办 在菲律宾旅游签证过期怎么办 微博转发被限制怎么办 百香果蜂蜜沉在下面怎么办 领导要潜我老婆怎么办 被领导潜了该怎么办 实习期单位领导开除我我该怎么办 泡泡袖显手臂肥怎么办 客人想吃霸王餐怎么办 在四楼上课时发生地震怎么办 学生在上课时发生地震怎么办 学生上课时发生地震怎么办 老板承诺的工资不兑现怎么办 只有本科毕业证没有学位证怎么办 孩子跟坏孩子玩怎么办 苕帚跟簸箕掉下来了怎么办 身体发烫又觉得冷怎么办 买苹果8后悔了怎么办 手机死机了怎么办不可拆卸电池 百度网盘密码忘了怎么办 空调冷凝水无法排出怎么办 转账时名字错了怎么办 打款名字错了怎么办 转账名字写错了怎么办 国际汇款汇错了怎么办 汇款英文写错了怎么办 体重秤不显示了怎么办 在ur试完衣服怎么办 汽车主机没有倒车检测线怎么办