我正在使用Repeater控件在ASPX页面上的HTML表格中显示数据库表格中的数据。还有两个链接按钮Approve
和Reject
,它们与Repeater方法ItemCommand
绑定。
每行的第一列都有一个复选框。这将使用户能够选择多行并执行批准和拒绝操作。这是代码:
<asp:Repeater ID="PendingRegRepeater" runat="server" OnItemCommand="PendingRegRepeater_ItemCommand">
<HeaderTemplate>
<table>
<thead>
<tr>
<th>
Select
</th>
<th>
Customer Name
</th>
<th>
Space ID
</th>
<th>
Date
</th>
<th>
Amount Paid
</th>
<th>
Pin Code
</th>
<th>
Payment Method
</th>
<th>
Action
</th>
</tr>
</thead>
</HeaderTemplate>
<ItemTemplate>
<tbody>
<tr>
<td>
<asp:CheckBox runat="server" />
</td>
<td>
<%# DataBinder.Eval(Container.DataItem, "CustomerName") %>
</td>
<td>
<%# DataBinder.Eval(Container.DataItem, "SpaceID") %>
</td>
<td>
<%# DataBinder.Eval(Container.DataItem, "TransactionDate") %>
</td>
<td>
<%# DataBinder.Eval(Container.DataItem, "AmountPaid") %>
</td>
<td>
<%# DataBinder.Eval(Container.DataItem, "Pincode") %>
</td>
<td>
<%# DataBinder.Eval(Container.DataItem, "PaymentMethod") %>
</td>
<td>
<asp:LinkButton ID="lnkApprove" CommandName="Approve" CommandArgument='<%# Eval("RRID") %>' Text="Approve" runat="server" ForeColor="Black" Font-Underline="true"></asp:LinkButton>
/
<asp:LinkButton ID="lnkReject" CommandName="Reject" CommandArgument='<%# Eval("RRID") %>' Text="Reject" runat="server" ForeColor="Black" Font-Underline="true"></asp:LinkButton>
</td>
</tr>
</tbody>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
但是当用户选择多个复选框并按下“批准”或“拒绝”按钮时,我无法想办法处理。编译器不允许我将Check-box的ID属性设置为动态值<%# Eval("RRID") %>
。请建议处理这种情况。感谢。
答案 0 :(得分:3)
我们将使用您分配给复选框的ID生成复选框的ID。生成的ASP.net将为生成的行中的每个复选框具有唯一ID。
HTML 的
<asp:CheckBox runat="server" id="checkBoxID" />
代码背后
foreach (RepeaterItem item in PendingRegRepeater.Items)
{
if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
{
var checkBox = (CheckBox)item.FindControl("checkBoxID");
checkBox.Checked = true;
}
}
答案 1 :(得分:2)
只需将每个复选框设置为静态IS即可。生成的实际ID对象对于每一行都是唯一的。
然后,您可以遍历所有行并访问每行的复选框:
foreach (RepeaterItem item in repeater.Items)
{
var checkbox = item.FindControl("checkboxId") as CheckBox;
}
答案 2 :(得分:2)
Greate,很明显我为你做的样品:
<asp:Repeater ID="rptPerson" runat="server" EnableViewState="false">
<ItemTemplate>
<asp:CheckBox ID="chCustomer" runat="server" Text='<%#Eval("FirstName") %>' />
<asp:HiddenField ID="hidden" runat="server" Value='<%#Eval("LastName") %>' />
</ItemTemplate>
</asp:Repeater>
在您的C#代码中:
protected void btnSubmit_Click(object sender, EventArgs e)
{
foreach (RepeaterItem item in rptPerson.Items)
{
CheckBox c = item.Controls[1] as CheckBox;
if (c.Checked)
doSomething((item.Controls[3] as HiddenField).Value);
}
}
您可以在此方法开始时断点,以检查您的转发器的控制位置。在这个例子中,asp:HiddenField位于第3位,asp:checkBox位于第1位。
我非常!!!建议你创建一个UserControl,它将一行所需的所有元素与所需的属性组合在一起,例如:Checked,ID等......并简单地将该控件放在转发器部分,这样它就能为每一行生成所有需要的东西(包括ID)。