我动态地将复选框添加到面板。
for (int intControlIndex = 0; intControlIndex < dsTagsList.Tables[0].Rows.Count; intControlIndex++)
{
chkList1 = new CheckBox();
chkList1.Text = dsTagsList.Tables[0].Rows[intControlIndex][0].ToString();
chkList1.ID = "Chk" + intControlIndex;
chkList1.Font.Name = "Verdana";
chkList1.Height = 20;
chkList1.ForeColor = System.Drawing.Color.Black;
chkList1.Font.Size = 10;
panelTags.Controls.Add(chkList1);
panelTags.Controls.Add(new LiteralControl("<br>"));
}
如何查看选中的复选框? 请告诉我....
答案 0 :(得分:3)
我会遍历面板中的所有控件,检查控件是否为复选框,如果是,则对其进行操作。
foreach(Control child in panelTags.Controls)
{
if(!(child is CheckBox))
continue;
if((child as CheckBox).Checked)
{
// Do 'is checked' something
}
else
{
// Do 'is not checked' something
}
}
或者更好的是,使用按类型过滤可枚举的LINQ OfType
:
foreach(CheckBox child in panelTags.Controls.OfType<CheckBox>())
{
if(child.Checked)
{
// Do 'is checked' something
}
else
{
// Do 'is not checked' something
}
}
LINQ语句让我们进一步查询列表 如果您只想对选中的复选框执行操作。
// Add to Usings
using System.Linq;
foreach(CheckBox child in panelTags.Controls
.OfType<CheckBox>()
.Where(chk => chk.Checked))
{
// Do 'is checked' something
}
我能想到的其他一些事情可能会导致问题:
foreach
之前是否正在调用Page_Load
?由于您可能会在回发中运行此功能,因此Page_Load
为the control properties are loaded with information recovered from view state and control state时。
是否在if(!IsPostBack)
内创建了复选框,以防止添加多个控件?
在添加复选框之前,您是否在调用panelTags.Controls.Clear();
,这将删除从页面返回的所有数据&gt;
答案 1 :(得分:0)
您可以尝试这样的事情:
void ReadCheckBoxControls(Control parent)
{
foreach (Control child in parent.Controls)
{
if (child.GetType().ToString().Equals("System.Web.UI.WebControls.CheckBox") && child.ID.IndexOf("Chk") == 0)
{
CheckBox CB = (CheckBox)child;
if (CB.Checked == true) {
// Your code here
}
else {
// Your code here
}
}
if (child.Controls.Count > 0)
{
ReadCheckBoxControls(child);
}
}
}
您可以这样调用此方法:
ReadCheckBoxControls(this.panelTags);
我希望这可以帮助你,祝你好运。
答案 2 :(得分:0)
实际上你添加的控件动态失去了存在,所以你必须重新定义 他们......在page_load的页面pre_int
比你能做到这一点..
for (int intControlIndex = 0; intControlIndex < dsTagsList.Tables[0].Rows.Count; intControlIndex++)
{
CheckBox chkList1 = (CheckBox)panelTags.findcontrol("Chk" + intControlIndex);
if(chkList1 != null)
{
if(chkList1.checked)
{
do something..
}
}
}
样本见此..
protected void Page_Load(object sender, EventArgs e)
{
AddCheckBoxes();
}
public void AddCheckBoxes()
{
for (int i = 0; i < 5; i++)
{
CheckBox chkbox = new CheckBox();
chkbox.ID = "chk" + i.ToString();
chkbox.Text = "check box " + i.ToString();
pan.Controls.Add(chkbox);
}
}
protected void btn_Click(object sender, EventArgs e)
{
for (int i = 0; i < 5; i++)
{
CheckBox chkbox = (CheckBox)pan.FindControl("chk" + i.ToString());
if(chkbox.Checked)
lblselected.Text += "check box " + i.ToString() +" ; ";
}
}
和Html是
<div>
<asp:Panel ID="pan" runat="server">
</asp:Panel>
<asp:Button ID="btn" runat="server" Text="Show selected" onclick="btn_Click" />
Selected : <asp:Label ID="lblselected" runat="server"></asp:Label>
</div>