3

我正在使用 Repeater 控件在 ASPX 页面上的 HTML 表中显示数据库表中的数据。还有两个链接按钮ApproveReject它们与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") %>。请建议处理这种情况。谢谢。

4

3 回答 3

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;
    }
}
于 2013-10-01T18:04:37.053 回答
2

只需为每个复选框设置一个静态 ID。生成的实际 ID 对象对于每一行都是唯一的。

然后,您可以浏览所有行并访问每一行的复选框:

foreach (RepeaterItem item in repeater.Items)
{
    var checkbox = item.FindControl("checkboxId") as CheckBox;
}
于 2013-10-01T18:06:07.687 回答
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 等)组合在一起,然后将该控件放在转发器部分,这样它就会为每一行生成您需要的所有内容(包括身份证)。

于 2013-10-01T18:21:40.267 回答