具有不同行数的 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;
}
我正在创建的 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;
}