在 jQuery Repeater 中检索过滤数据

很多时候, 我们都会用到搜索的功能, 这次将向大家介绍 Repeater 如何设置检索数据.

由于精力有限, 不能在多个博客中保证文章的同步, 可在如下地址查看最新内容, 请谅解:

http://code.google.com/p/zsharedcode/wiki/JERepeaterSearch

请到 Download 下载资源JQueryElement 示例下载一节下载示例代码

本文将详细的讲解如何在 Repeater 中检索数据信息, 目录如下:

  * 准备

  * 设置 FilterTemplate

  * 设置 FilterField 和 FilterFieldDefault

  * 调用 setfilter 和 filter 函数

准备

请先查看 30 分钟掌握无刷新 Repeater 或者准备一节的内容.

设置 FilterTemplate

RepeaterFilterTemplate 属性中, 包含用于填写搜索条件的元素, 比如文本框, 日期框等. 此外, 也可以包含搜索按钮:

<je:Repeater ID="productList" runat="server"        ...    >

<FilterTemplate>
<tr>
<td>
<input type="text" size="10"
je-id
="productname"
je-value
="productname"/>
</td>
<td>
<input type="text" size="5"
je-id
="model"
je-value
="model"/>
</td>
<td>
<input type="text" size="4"
je-id
="price1"
je-value
="price1"/>
-
<input type="text" size="4"
je-id
="price2"
je-value
="price2"/>
</td>
<td>
<input type="text" size="3"
je-id
="amount"
je-value
="amount"/>
</td>
<td>
<input type="text" size="10"
je-datepicker
="dateFormat='yy-mm-dd';changeMonth=true;changeYear=true"
je-id
="manufactureDate1"
je-value
="manufactureDate1"/>
-
<input
je-datepicker="dateFormat='yy-mm-dd';changeMonth=true;changeYear=true"
type
="text" size="10"
je-id
="manufactureDate2"
je-value
="manufactureDate2"/>
</td>
</tr>
<tr je-class="{highlight}">
<td colspan="5" align="right">
<span je-button=";" onclick="javascript:clearCondition();">清空</span>
<span je-button=";" je-onclick="filter">搜索</span>
</td>
</tr>
</FilterTemplate>

</je:Repeater>

代码中, 使用了 input 元素来添加文本框和日期框, 通过 je-id 来与 FilterField 属性中的搜索字段关联, je-value 则是表示使用指定搜索条件来初始化.

上面还使用了 je-datepicker 创建日期框, 至于如何使用 je-<jQueryUI 插件名> 创建更多 jQueryUI 插件, 可以参考 在 jquery repeater 中添加设置日期,下拉,复选框等控件.

通过 je-buttonje-onclick, 创建了用于搜索的按钮, je-onclick 被指定为 filter, 也就是将执行 repeaterfilter 方法, 可以参考 30 分钟掌握无刷新 Repeater 的特殊绑定一节.

设置 FilterField 和 FilterFieldDefault

FilterField 中设置的字段名, 将作为参数传递给服务器端的方法:

<je:Repeater ID="productList" runat="server"
FilterField
="['productname','price1','price2']"
FilterFieldDefault
="['',-1,-1]"
FillAsync-Url
="product.asmx"
FillAsync-MethodName
="GetProductList">

<FilterTemplate>
<tr>
<td>
<input type="text" size="10"
je-id
="productname" je-value="productname"/>
</td>

<td>
<input type="text" size="4"
je-id
="price1" je-value="price1"/>
-
<input type="text" size="4"
je-id
="price2" je-value="price2"/>
</td>

</tr>
</FilterTemplate>

</je:Repeater>

代码中, 通过 FilterField 设置了 3 个用于搜索的字段 productname, price1, price2, 并通过 FilterFieldDefault 来设置这些搜索条件的默认值, 因此服务器端方法 GetProductList 可以采用如下的形式:

public SortedDictionary<string, object> GetProductList (
int pageindex, int pagesize,
string productname, float price1, float price2 )
{

if ( price1 != -1 )
...

if ( price2 != -1 )
...

}

如果 price1 和 price2 等于 -1, 则表示用户没有设置关于价格的搜索条件. 至于服务器端返回数据的格式, 请参考 30 分钟掌握无刷新 Repeater 的请求/返回数据的格式一节.

调用 setfilter 和 filter 函数

经过上面简单的设置, 已经可以通过 FilterTemplate 中的搜索按钮来检索数据, 此外, 还可以使用另一个方法:

<input id="myproductname" type="text" size="10"/>

<je:Button ID="cmdSearch" runat="server" Label="搜索 2" Click="
function(){
productList.__repeater('setfilter', 'productname', $('#myproductname').val());
productList.__repeater('filter');
}
"
>
</je:Button>

上面的示例中, id 为 myproductname 的文本框用来输入搜索的产品名称, 而在按钮的 Click 事件中, 调用 repeatersetfilter 方法来将 myproductname 中的值设置到 repeater 的过滤条件中, 调用 filter 方法来检索数据.

JQueryElement 是开源共享的代码, 可以在 http://code.google.com/p/zsharedcode/wiki/Download 页面下载 dll 或者是源代码.

实际过程演示: http://www.tudou.com/programs/view/HJmCQRpGQEg/, 建议全屏观看.

原文地址:https://www.cnblogs.com/zoyobar/p/JE_22.html