在Web开发中,经常需要对数据表格进行多行操作,例如全选、取消选择、标记为垃圾邮件等。jQueryRepeater控件提供了一种方便的方式来实现这些功能。本文将详细讲解如何使用jQuery Repeater进行多行操作,并展示操作的进度。
在开始之前,请确保已经熟悉了ASP.NET和jQuery的基本使用。可以通过以下链接下载示例代码:
示例代码下载:
代码目录位于:/repeater/Default.aspx
MultipleSelect属性用于控制Repeater控件是否允许多行选择,默认值为true。如果设置为false,则只能选择一行。
示例代码:
<ItemTemplate>
<tr>
<td>
<input type="checkbox" je-checked="selected" je-onclick="toggleselect,false" />
</td>
</tr>
</ItemTemplate>
在上述代码中,toggleselect
方法后面跟一个布尔参数,默认为true,表示取消前一行的选择状态。如果将参数设置为false,则可以选择多行。此外,还可以调用select
和unselect
方法来选择或取消选择一行。
通常,会在Repeater控件的底部模板中添加一个“全选”按钮:
<FooterTemplate>
<tfoot>
<tr>
<td colspan="4">
<a href="#" je-onclick="selectall">全选</a>
<a href="#" je-onclick="unselectall">取消全选</a>
<a href="#" je-onclick="toggleselectall">切换全选</a>
</td>
</tr>
</tfoot>
</FooterTemplate>
将je-onclick
设置为selectall
,点击该链接时,所有行将被选中。此外,还可以将je-onclick
设置为unselectall
、toggleselectall
。
Repeater控件支持使用removeselected
和customselected
方法对多行进行操作:
<je:Repeater ID="emailRepeater" runat="server" Selector="'#list'" CustomAsync-Url="webservice.asmx" CustomAsync-MethodName="CustomEMail" ... >
<FooterTemplate>
<tfoot>
<tr>
<td colspan="4">
<a href="#" je-onclick="customselected,'spam'">标记为垃圾邮件</a>
<a href="#" je-onclick="customselected,'unspam'">取消垃圾邮件标记</a>
</td>
</tr>
</tfoot>
</FooterTemplate>
</je:Repeater>
在上述示例中,调用customselected
方法对选中的行执行自定义操作,自定义操作的名称为spam
和unspam
。自定义操作将调用WebService.asmx中的CustomEMail
方法:
[WebMethod]
[ScriptMethod]
public SortedDictionary<string, object> CustomEMail (
int id, string no, bool isspam, string command
)
{
this.Context.Response.Cache.SetNoStore();
if (command == "spam")
{
isspam = true;
Thread.Sleep(1000);
}
else if (command == "unspam")
{
isspam = false;
Thread.Sleep(1000);
}
else if (command == "togglespam")
isspam = !isspam;
// 返回JSON
}
在CustomEMail
方法中,使用Thread
类的Sleep
方法来延长执行时间,以便在页面上显示执行进度。
可以通过设置SubStepping
属性为JavaScript方法来获取进度:
<je:Repeater ID="emailRepeater" runat="server" Selector="'#list'" PageSize="5" IsVariable="true" ... CustomAsync-Url="webservice.asmx" CustomAsync-MethodName="CustomEMail" PreSubStep="function(pe, e){ pb.progressbar('option', 'value', 0).show(); }" SubStepping="function(pe, e){ pb.progressbar('option', 'value', (100 * e.substep.completed / e.substep.count)); emailRepeater.__repeater('showtip', 'Completed ' + e.substep.completed); }" SubStepped="function(pe, e){ pb.hide(); }">
</je:Repeater>
在SubStepping
中,参数e
有一个名为substep
的属性,count
属性表示总行数,completed
属性表示已完成的行数。此外,通过repeater
的showtip
方法,显示进度消息。关于如何显示消息,可以参考Show Message injQueryRepeaterWhen Validate Or Update
。