数据筛选与分页
筛选后的数据,可能还是太多,依然需要分页处理:
如何筛选,如何分页,前面都有讲述,并不复杂。
将二者组合起来,首先必须解决的问题是如何保存和传递筛选条件,当然我们可以像页码一样,将条件写在url地址中,用get方式传递。
但是这样的设计,会增加编码难度,我们改用cookie来保存和传递筛选条件,会方便很多,关于cookie,参考: 使用cookie
下面是一小段示例代码,清晰地说明了如何通过cookie来保存和传递筛选条件:
Dim
flt As
String
If e.GetValues.ContainsKey("unfilter")
Then
wb.ClearCookie()
ElseIf e.PostValues.ContainsKey("product")
Then
flt =
"产品
= '"
& e.PostValues("product")
& "'"
wb.AppendCookie("product",
e.PostValues("product"))
ElseIf e.Cookies.ContainsKey("product")
Then
flt =
"产品
= '"
& e.Cookies("product")
&
"'"
End
If
代码流程如下:
1、首先判断访问请求中是否包括get参数"unfilter",如果包括,则清除所有Cookie。
2、然后判断PostValues中是否包括product,如果有则从PostValues中提起此值合成筛选条件,然后将product的值保存在cookie中。
3、如果PostValues中是不包括product,就判断cookie中是否包括product,如果有,则提取此值合成筛选条件。
使用流程如下:
1、用户通过筛选页面输入筛选条件,单击确定按钮提交到服务器,此时product的值是保存在PostValues中的,服务端从PostValues中提取出product合成筛选条件,然后将product的值存入客户端的cookie中。
2、当用户单击上一页、下一页按钮时,保存在cookie中的product值,会自动发送到服务器,服务端从cookie中提取出product值合成筛选条件。
3、如果用户单击"取消筛选"按钮,向服务器发出访问请求"list.htm?unfilter=true",服务段收到请求后,判断请求中包括get参数"unfilter",如是清除cookie,系统回到非筛选状态。
完整的HttpRequest事件代码:
Dim
wb As
New WeUI
Select
Case e.Path
Case
"filter.htm"
wb.AddForm("","form1","list.htm")
With wb.AddInputGroup("form1","ipg1","数据筛选")
.AddSelect("product","产品","|PD01|PD02|PD03|PD04|PD05")
.AddInput("startdate","开始日期","date")
.AddInput("enddate","结束时间","date")
End With
With wb.AddButtonGroup("form1","btg1",True)
.Add("btn1",
"确定",
"submit")
End With
Case "list.htm"
'合成条件
Dim flt
As String
If e.GetValues.ContainsKey("unfilter")
Then '如果有unfilter参数,则清除cookie
wb.ClearCookie()
ElseIf e.PostValues.Count
> 0 Then
'如果是filter.htm访问,则根据用户输入合成条件表达式
If e.PostValues.ContainsKey("product")
Then
flt =
"产品
= '"
& e.PostValues("product")
& "'"
'合成条件
wb.AppendCookie("product",
e.PostValues("product"))
'将值写入cookie中
Else
wb.DeleteCookie("product")
'删除cookie
End If
If
e.PostValues.ContainsKey("startdate")
Then
If
flt > ""
Then
flt =
flt &
" and "
End
If
flt =
flt &
"日期
>= '"
& e.PostValues("startdate")
& "'"
wb.AppendCookie("startdate",
e.PostValues("startdate"))
Else
wb.DeleteCookie("startdate")
End If
If
e.PostValues.ContainsKey("enddate")
Then
If
flt > ""
Then
flt =
flt &
" and "
End
If
flt =
flt &
"日期
<= '"
& e.PostValues("enddate")
& "'"
wb.AppendCookie("enddate",
e.PostValues("enddate"))
Else
wb.DeleteCookie("enddate")
End If
Else
'否则根据Cookie合成条件表达式
If e.Cookies.ContainsKey("product")
Then
flt =
"产品
= '"
& e.Cookies("product")
& "'"
End
If
If
e.Cookies.ContainsKey("startdate")
Then
If
flt > ""
Then
flt =
flt &
" and "
End
If
flt =
flt &
"日期
>= '"
& e.Cookies("startdate")
& "'"
End
If
If
e.Cookies.ContainsKey("enddate")
Then
If
flt > ""
Then
flt =
flt &
" and "
End
If
flt =
flt &
"日期
<= '"
& e.Cookies("enddate")
& "'"
End
If
End If
'获取要显示的页码
Dim page
As Integer =
0 '默认page为0,显示第一页
Dim pageRows
As Integer =
10 '每页10行
If e.GetValues.ContainsKey("page")
Then '如果地址中有page参数
Integer.TryParse(e.GetValues("page"),
page) '提取page参数
End If
Dim
StartRow As
Integer = page *
pageRows + 1
'此页第一行
Dim
EndRow As
Integer = (page +
1) * pageRows
'此页最后一行
'提取此页数据
Dim cmd
As New
SQLCommand
cmd.ConnectionName
= "orders"
'记得设置数据源名称
cmd.CommandText
= "Select Count(*) From {订单}"
If
flt > ""
Then
cmd.CommandText
= cmd.CommandText
& " where "
& flt
End If
Dim
Count As
Integer = cmd.ExecuteScalar()
'获取总的行数
cmd.CommandText
= "Select * From (Select Row_Number() Over(Order by
日期)
As [NO.],
产品,客户,数量,单价,日期
From 订单
"
If flt
> "" Then
cmd.CommandText
= cmd.CommandText
& " where "
& flt
End If
cmd.CommandText
= cmd.CommandText
& ") As a "
cmd.CommandText
= cmd.CommandText
& " Where [NO.]>= "
& StartRow
& " And [NO.] <= "
& EndRow
'合成网页
With wb.AddTable("","Table1")
.CreateFromDataTable(cmd.ExecuteReader)
End With
With wb.AddButtonGroup("","btg2",
False)
If page
> 0 Then
.Add("btnPrev",
"上一页","","List.htm?page="
& page -
1)
End If
If
Endrow < count
Then
.Add("btnNext",
"下一页","","List.htm?page="
& page +
1)
End If
If
flt = "" Then
.Add("btn1",
"筛选",
"","filter.htm").kind
= 1
Else
.Add("btn1",
"取消筛选",
"","list.htm?unfilter=true").kind
= 1
End
If
End With
End
Select
e.WriteString(wb.Build)
深圳SEO优化公司营口外贸网站制作鞍山网页制作绥化高端网站设计公司苏州外贸网站制作公司昭通建站推荐哈尔滨百搜标王推荐陇南关键词按天扣费公司黄山百搜标王公司咸阳百度网站优化排名多少钱莆田网站设计模板亳州网站优化推广公司阳泉网站推广方案多少钱张家界外贸网站制作乐山设计网站报价洛阳SEO按效果付费哪家好邵阳品牌网站设计报价漳州网站排名优化价格宜春网站设计报价抚州优秀网站设计怀化关键词按天收费哪家好海口网站搜索优化推荐吴忠外贸网站制作报价南阳优化哪家好运城seo优化报价海西百度竞价推荐嘉兴百度网站优化多少钱九江seo网站优化常州优化价格阜阳至尊标王多少钱资阳网站制作公司歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运