C# 循环检查表中的所有复选框
我有一个表格单元格,在运行时用复选框和标签填充C# 循环检查表中的所有复选框,c#,asp.net,C#,Asp.net,我有一个表格单元格,在运行时用复选框和标签填充 List<string> lstUserPool = new List<string>(); DataTable dt = GetData("SELECT UserName FROM eData ORDER BY UserName;", "Data Source = lewcomp1\\COMPLIANCE; Initial Catalog = ComplianceData; Integrated Security = Tr
List<string> lstUserPool = new List<string>();
DataTable dt = GetData("SELECT UserName FROM eData ORDER BY UserName;", "Data Source = lewcomp1\\COMPLIANCE; Initial Catalog = ComplianceData; Integrated Security = True;");
for (int i = 1; i < dt.Rows.Count; i++)
{
CheckBox cb = new CheckBox();
cb.ID = "cb" + dt.Rows[i]["Username"].ToString();
Label lbl = new Label();
lbl.ID = "lbl" + dt.Rows[i]["Username"].ToString();
lbl.Text = dt.Rows[i]["Username"].ToString();
lbl.Font.Size = new FontUnit("18px");
if (IsOdd(i))
{
cellUsersPoolLeft.Controls.Add(cb);
cellUsersPoolLeft.Controls.Add(lbl);
cellUsersPoolLeft.Controls.Add(new LiteralControl("<br/>"));
}
if (IsEven(i))
{
cellUsersPoolRight.Controls.Add(cb);
cellUsersPoolRight.Controls.Add(lbl);
cellUsersPoolRight.Controls.Add(new LiteralControl("<br/>"));
}
}
List lstUserPool=new List();
DataTable dt=GetData(“按用户名从eData ORDER中选择用户名;”,“数据源=lewcomp1\\COMPLIANCE;初始目录=ComplianceData;集成安全性=True;”;
对于(int i=1;i ”);
}
if(IsEven(i))
{
cellUsersPoolRight.Controls.Add(cb);
cellUsersPoolRight.Controls.Add(lbl);
cellUsersPoolRight.Controls.Add(新的LiteralControl(“
”);
}
}
稍后,我想通过这些复选框来检查哪些是选中的,哪些不是。我试过在SO上找到的各种例子,但都不走运。就好像复选框不在我添加到的TableCell中一样。以下两个循环都找不到任何复选框控件:
foreach (Control ctl in cellUsersPoolRight.Controls)
{
if (ctl is CheckBox)
{
}
}
//foreach(var checkBox in cellUsersPoolRight.Controls.OfType<CheckBox>())
//{
// if (checkBox.Checked)
// {
// naz.Add(checkBox.ID);
// }
//}
foreach(cellUsersPoolRight.Controls中的控制ctl)
{
如果(ctl为复选框)
{
}
}
//foreach(cellUsersPoolRight.Controls.OfType()中的var复选框)
//{
//如果(复选框。选中)
// {
//naz.Add(checkBox.ID);
// }
//}
对不起,我还不能写评论
在哪个事件上尝试添加控件,在哪个事件上尝试读取控件
看一看这篇文章,了解更多。
检查第页上的事件顺序,以及您是否在生命周期中使用了正确的事件 对不起,我还不能写评论 在哪个事件上尝试添加控件,在哪个事件上尝试读取控件 看一看这篇文章,了解更多。
检查第页上的事件顺序,以及您是否在生命周期中使用了正确的事件 我建议您使用转发器,并在转发器中将复选框和标签数据绑定到ItemTemplate。这将很容易让您通过中继器循环获取数据。如果需要其他数据,请在中继器中添加Hiddenfield以存储这些数据
<asp:Repeater ID="UserRepeater" runat="server">
<HeaderTemplate>
<table>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<asp:CheckBox ID="UserCheckBox" runat="server" Checked='<%# Convert.ToBoolean(Eval("IsUserChecked")) %>' ToolTip='<%# Eval("UserId") %>'
onmouseover="title='';" />
</td>
<td>
<asp:Label ID="UserNameLabel" runat="server" Text='<%# Eval("UserName") %>'></asp:Label>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
然后在图像按钮的回发中,单击可从中继器获取项目
foreach (RepeaterItem ri in UserRepeater.Items)
{
CheckBox userCheckBox = ri.FindControl("UserCheckBox") as CheckBox;
}
我建议您使用Repeater并将复选框和标签数据绑定到Repeater中的ItemTemplate。这将很容易让您通过中继器循环获取数据。如果需要其他数据,请在中继器中添加Hiddenfield以存储这些数据
<asp:Repeater ID="UserRepeater" runat="server">
<HeaderTemplate>
<table>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<asp:CheckBox ID="UserCheckBox" runat="server" Checked='<%# Convert.ToBoolean(Eval("IsUserChecked")) %>' ToolTip='<%# Eval("UserId") %>'
onmouseover="title='';" />
</td>
<td>
<asp:Label ID="UserNameLabel" runat="server" Text='<%# Eval("UserName") %>'></asp:Label>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
然后在图像按钮的回发中,单击可从中继器获取项目
foreach (RepeaterItem ri in UserRepeater.Items)
{
CheckBox userCheckBox = ri.FindControl("UserCheckBox") as CheckBox;
}
这是一个图像按钮单击事件确定:)在web应用程序中,整个过程将发生在每次回发上,因此您不能向控件中添加某些内容,并期望在下次回发时它会出现。要解决此问题,您必须将数据添加到数据容器中,然后将数据源绑定到控件,或者自己从数据源添加。这是一个图像按钮单击事件确定:)在web应用程序中,整个过程将在每次回发时进行,因此,您不能向控件中添加某些内容,并期望它在下次回发时出现。要解决这个问题,您必须将数据添加到数据容器中,然后将数据源绑定到控件,或者自己从数据源添加数据。我非常喜欢这种方法,第一次使用中继器。谢谢你知道我如何修改ItemTemplate以允许两列数据而不是一列数据吗?它非常强大,在我使用了几次之后,我就可以控制列表了。它非常适合于复选框列表。我有一些很棒的javascript,我用jquery检查或取消检查它们。这也是一个非常有用的特性,它已经有两列了。查看1列/td代表复选框,1列/td代表用户名。如果您想添加更多,只需添加td标记和其他数据。这是一个相当棘手的问题。我通常只为中继器设置div容器的高度,并允许滚动。您可以设置2个中继器和2个数据源,然后基本上分别分页数据源,先占50%,然后占最后50%。最好的解决方案是放弃table方法,将每个项目设为一个具有固定宽度的div,然后将它们向左浮动。给中继器的容器一个固定的高度,项目将向左流动,并创建适合空间的列。这应该是响应性的。这基本上是第二个问题。@MitchelStuartFountaine这是你需要的。只有我非常喜欢这种方法,第一次使用中继器。谢谢你知道我如何修改ItemTemplate以允许两列数据而不是一列数据吗?它非常强大,在我使用了几次之后,我就可以控制列表了。它非常适合于复选框列表。我有一些很棒的javascript,我用jquery检查或取消检查它们。这也是一个非常有用的特性,它已经有两列了。查看1列/td代表复选框,1列/td代表用户名。如果您想添加更多,只需添加td标记和其他数据。这是一个相当棘手的问题。我通常只为中继器设置div容器的高度,并允许滚动。您可以设置2个中继器和2个数据源,然后基本上分别分页数据源,先占50%,然后占最后50%。最好的解决方案是放弃table方法,将每个项目设为一个具有固定宽度的div,然后将它们向左浮动。给中继器的容器一个固定的高度,项目将向左流动,并创建适合空间的列。这应该是响应性的。这基本上是第二个问题。@MitchelStuartFountaine这是你需要的。仅CSS