具有不同行数的 C# 转发器,每行能够使用 CheckBox/Other 方法 Return 不同的字符串

C# Repeater with a Varying Number of Rows Each Able to Return a Different String With a CheckBox/Other Method

我正在创建的 Asp.net 网站使用 Repeater 来显示有关两个数据库中重复项或缺失项的字符串列表。还有另一个与 SQL 语句并行创建的字符串列表,其中一个 SQL 语句对应于 Repeater 列表中相同编号的字符串。列表中的字符串数量取决于所选的数据库,范围从 0 到 100+。

问题:由于 Repeater 的行数未知,我试图找到一些方法来生成未知数量的 checkboxes/buttons(每行一个)。单击时,checkbox/button 将在另一个列表中以单独的方法为该行找到适当的 SQL 语句。有没有人知道如何创建可变数量的复选框?

这可以通过向按钮添加 CommandArgument 并为其分配 Command 而不是 Click 来完成。

<asp:Repeater ID="Repeater1" runat="server">
    <ItemTemplate>
        <asp:Label ID="Label1" runat="server" Text='<%# Eval("myColumn") %>'></asp:Label>
        <br />
        <asp:Button ID="Button1" runat="server" CommandArgument='<%# Eval("ID") %>' OnCommand="Button1_Command" Text="Button" />
        <hr />
    </ItemTemplate>
</asp:Repeater>

<asp:Label ID="Label2" runat="server" Text=""></asp:Label>

然后在后面的代码中处理 OnCommand

protected void Button1_Command(object sender, CommandEventArgs e)
{
    Label2.Text = e.CommandArgument.ToString();
}

如果你想读取一个 CheckBox,你需要在后面的代码中稍微多一点代码。

<asp:Repeater ID="Repeater1" runat="server">
    <ItemTemplate>
        <asp:Label ID="Label1" runat="server" Text='<%# Eval("field01") %>'></asp:Label>
        <br />
        <asp:CheckBox ID="CheckBox1" runat="server" Checked='<%# Convert.ToBoolean(Eval("itemid")) %>' />
        <br />
        <asp:Button ID="Button1" runat="server" CommandArgument='<%# Eval("itemid") %>' OnCommand="Button1_Command" Text="Button" />
        <hr />
    </ItemTemplate>
</asp:Repeater>

protected void Button1_Command(object sender, CommandEventArgs e)
{
    Button btn = sender as Button;
    RepeaterItem item = (RepeaterItem)btn.NamingContainer;
    CheckBox cb = item.FindControl("CheckBox1") as CheckBox;

    Label2.Text = "Item with ID " + e.CommandArgument + " has checkbox " + cb.Checked;
}