未从复选框中添加文本的列表
本文关键字:文本 列表 添加 复选框 | 更新日期: 2023-09-27 18:18:03
我有一个表,有4行状态复选框(NJ, CA, FL等)
表有一个ID和一个runat="server"标签,每个复选框都有一个'ID' 'Text'和'runat="server"'标签。
我试图使一个列表如下,以便在查询中使用,但它没有得到添加
List<string> query = new List<string>();
foreach (Control c in tableStates.Controls)
{
if (c is CheckBox)
{
CheckBox chk = (CheckBox)c;
if (chk.Checked)
{
query.Add(chk.Text);
}
}
}
string line = string.Join(" or ", query.ToArray());
tbTest.Text = line;
我以前对一个表做过这个,但我使用的是form1。控件,它在foreach中工作,但我不想使用form1,以防页面上除了状态之外还有其他复选框。
正在使用form1。控制我唯一的选项
这是表的一行
<table runat="server" id="tableStates">
<tr>
<td><asp:CheckBox ID="Checkbox0" Text="AL" runat="server" /></td>
<td><asp:CheckBox ID="Checkbox1" Text="AK" runat="server" /></td>
<td><asp:CheckBox ID="Checkbox2" Text="AZ" runat="server" /></td>
<td><asp:CheckBox ID="Checkbox3" Text="AR" runat="server" /></td>
<td><asp:CheckBox ID="Checkbox4" Text="CA" runat="server" /></td>
<td><asp:CheckBox ID="Checkbox5" Text="CO" runat="server" /></td>
<td><asp:CheckBox ID="Checkbox6" Text="CT" runat="server" /></td>
<td><asp:CheckBox ID="Checkbox7" Text="DE" runat="server" /></td>
<td><asp:CheckBox ID="Checkbox8" Text="DC" runat="server" /></td>
<td><asp:CheckBox ID="Checkbox9" Text="FL" runat="server" /></td>
<td><asp:CheckBox ID="Checkbox10" Text="GA" runat="server" /></td>
<td><asp:CheckBox ID="Checkbox11" Text="HI" runat="server" /></td>
<td><asp:CheckBox ID="Checkbox12" Text="ID" runat="server" /></td>
</tr>
</table>
需要循环遍历表中的所有taberows和TableCells来获得CheckBox控件。
List<string> query = new List<string>();
foreach (HtmlTableRow tr in tableStates.Controls)
{
foreach (HtmlTableCell tc in tr.Cells)
{
foreach (Control c in tc.Controls)
{
if (c is CheckBox)
{
CheckBox chk = (CheckBox)c;
if (chk.Checked)
{
query.Add(chk.Text);
}
}
}
}
}
string line = string.Join(" or ", query.ToArray());
tbTest.Text = line;
或者尝试像这样使用扩展类:
public static class ControlExtensions
{
public static IEnumerable<T> GetAllControlsOfType<T>(this Control parent) where T : Control
{
var result = new List<T>();
foreach (Control control in parent.Controls)
{
if (control is T)
{
result.Add((T)control);
}
if (control.HasControls())
{
result.AddRange(control.GetAllControlsOfType<T>());
}
}
return result;
}
}
在这种情况下,你可以这样使用:
var checkboxes = tableStates.GetAllControlsOfType<CheckBox>();
string line = string.Join(" or ", ctrls.ToArray<CheckBox>()
.Where<CheckBox>(x => x.Checked == true)
.Select(x => x.Text));