总计 182 次浏览

接上期

目录

一、“拖拽控件”实现简述

二、代码实现GridView筛选

1.下拉菜单的数据源

2.添加下拉菜单及提示信息

3.下拉菜单默认值改为“全部”

4.编写代码

三、效果展示

1.筛选结果小于1页

2.筛选结果大于1页 

3.选择全部(无筛选)效果

四、讨论


上期文章实现了支持模糊查询对关键字查询,本期计划实现“筛选”功能。

对于GridView筛选功能的实现,有两种方式,一种是“拖拽控件”实现,一种是代码实现。今天我们重点说代码的实现,原生的方式仅做简单介绍。

一、“拖拽控件”实现简述

这种方式一般需要现放置用于筛选的控件,可能是一个文本框加一个按钮,也可能是一个下拉菜单。然后进行数据源的配置,这里其实就是参数查询,参数来源于文本框或者下拉菜单。最后布置GridView控件,指定好数据源。

【GridView渐进全解】第七部分 GridView筛选插图

【GridView渐进全解】第七部分 GridView筛选插图1

当事件触发后(按钮Click/下拉菜单TextChanged),直接执行数据绑定(GridView1.DataBind();)就行了。

看到这里,大家就明白了,这就是数据库的查询,说是“筛选”有些牵强。

二、代码实现GridView筛选

这里我们按“职务”进行筛选,用下拉菜单来实现筛选关键字的选项。下拉菜单的数据来自GridView数据源中的“职务”列,我们按照不重复的职务选用。筛选用dataView的RowFilter命令实现。

1.下拉菜单的数据源

在页面中拖入一个数据源,命名为SqlDataSource_ZW。注意选择“只返回唯一行”

【GridView渐进全解】第七部分 GridView筛选插图2

配置好以后到源代码为:

SELECT distinct [zw] FROM [qxmm_demo] WHERE ([zw] IS NOT NULL)
		
代码解读

 最后代码:

【GridView渐进全解】第七部分 GridView筛选插图3

 

2.添加下拉菜单及提示信息

继续我们之前的案例,这次在“信息栏”的表格不居中添加下拉菜单,ID:ddlZW

数据源指定为SqlDataSource_ZW

源代码:

【GridView渐进全解】第七部分 GridView筛选插图4

页面效果: 

【GridView渐进全解】第七部分 GridView筛选插图5

【GridView渐进全解】第七部分 GridView筛选插图6

需要注意的是,AutoPostBack 属性设置为true,否则无法触发“事件”。

3.下拉菜单默认值改为“全部”

这是为了实现“筛选”后,用户不用筛选关键字时准备的

给下拉菜单添加事件:DataBound,也就是下拉菜单数据渲染结束后

		
  1. protected void ddlZW_DataBound(object sender, EventArgs e)
  2. {
  3. DropDownList dropDownList = sender as DropDownList;
  4. // 添加一个新选项
  5. dropDownList.Items.Insert(0, new ListItem("全部", "all"));
  6. // 设置新添加的选项为默认值
  7. dropDownList.SelectedIndex = 0;
  8. }
代码解读

这样,下拉菜单就多了一个默认项目:全部

4.编写代码

给下拉菜单加上选择更改的事件处理过称:

		
  1. protected void DropZW_TextChanged(object sender, EventArgs e)
  2. {
  3. //判断是全部还是部分筛选
  4. if (this.ddlZW.SelectedValue != "all")
  5. {
  6. DataView dataView = null;
  7. // 从SqlDataSource获取数据并转换为DataTable
  8. DataTable dataTable = ((System.Data.DataView)SqlDataSource1.Select(DataSourceSelectArguments.Empty)).ToTable();
  9. if (dataTable != null)
  10. {
  11. dataView = dataTable.DefaultView;
  12. }
  13. // 这里可以进行DataView的过滤操作
  14. if (dataView != null)
  15. {
  16. //筛选条件
  17. dataView.RowFilter = "zw LIKE '" + this.ddlZW.Text + "'";
  18. //给GridView更换数据源
  19. GridView1.DataSourceID = null;
  20. GridView1.DataSource = dataView;
  21. }
  22. }
  23. else
  24. {
  25. //如果是 全部 得吧数据源换回来
  26. GridView1.DataSourceID = this.SqlDataSource1.ID;
  27. }
  28. //刷新控件
  29. GridView1.DataBind();
  30. //再次计算总记录数
  31. GetRecordTotal();
  32. //打开分页
  33. this.GridView1.AllowPaging = true;
  34. }
【GridView渐进全解】第七部分 GridView筛选插图7
代码解读

三、效果展示

1.筛选结果小于1页

【GridView渐进全解】第七部分 GridView筛选插图8

2.筛选结果大于1页 

【GridView渐进全解】第七部分 GridView筛选插图9

3.选择全部(无筛选)效果

 

【GridView渐进全解】第七部分 GridView筛选插图10

四、讨论

严格来说,“查询”与“筛选”还是有区别的,“查询”一般是指从数据库中查询数据;“筛选”是指在从数据库获取的数据集合中进行的筛选。“查询”工作在数据库,“筛选”工作在内存。

本文涉及的两种实现的方式,第一种方式就是工作在数据库,第二种方式如果修改一下,令GridView的数据源从开始就使用DataView,这样利用DataView的RowFilter就可以实现在内存中筛选了。

如果数据量、并发量不大还好,否则每次都访问数据库,会带来很大的性能下降。因此建议大家还是采用真正的“筛选”比较理想。


文章结束。创作图文不易,感谢点赞支持,欢迎收藏、关注我后期文章。 

By 站长

发表回复

普人特福的博客cnzz&51la for wordpress,cnzz for wordpress,51la for wordpress