[转载]在 jQuery Repeater 中检索过滤数据

[转载]在 jQuery Repeater 中检索过滤数据 – 麦丝平方 – 博客园.

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

示例代码下载: http://zsharedcode.googlecode.com/files/JQueryElementDemo.rar

本文将详细的讲解如何在 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/, 建议全屏观看.

欢 迎访问 panzer 开源项目, http://zsharedcode.googlecode.com/ , 其中包含了 IEBrowser 控制 WebBrowser 执行各种 js 和 jQuery 脚本以及录制功能 和 jQueryUI 的 ASP.NET 控件 JQueryElement.
赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏