【问题标题】:Selected checkbox is not recognized as such选中的复选框不能被识别为这样
【发布时间】:2012-06-06 13:33:26
【问题描述】:

我有一个带有可变数量复选框的复选框列表,我正在做类似的事情:

protected void CheckBoxList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        for (int j = 0; j < CheckBoxList1.Items.Count; j++)
        {
            //LabelTest.Text = "Something"; It works here
            if (CheckBoxList1.Items[j].Selected)
            {
                //LabelTest.Text = "Something 2"; It doesn't work here
                TextBoxTest.Text = CheckBoxList1.Items[j].Text;
                LabelTest.Text = CheckBoxList1.Items[j].Value;
            }
        }
    }

当我选中一个框时,我的页面上会显示“某事”,但其余的则不会。 我也试着写下我的“如果”:

if (!CheckBoxList1.Items[j].Selected)

这样做,当我选中一个框时,我的 TextBoxTest 显示“106”,这是我拥有的复选框的总数,而不是选中的框的数量。

我的 CheckBoxList1 有一个真正的自动回发。

【问题讨论】:

  • 你可以显示你填充复选框列表的代码
  • 当然,我之前问了另一个问题,一切(我认为)都在上面:) stackoverflow.com/questions/10846445/…
  • 你什么时候填写你的复选框?如果您在每个 Page_Load 上重新创建它们,您可能会忽略您已经检查过的事实。
  • 哦,废话!是的,我像你说的那样在每个 Page_Load 上重新创建它们!谢谢你的提示,我现在就去看看!谢谢!

标签: c# asp.net checkbox checkboxlist


【解决方案1】:

对于复选框,您应该使用属性Checked 而不是Selected

 if (CheckBoxList1.Items[j].Checked)

但我现在无法测试。

【讨论】:

  • 我试过了,但我有一个“blah blah 不包含“Checked”的定义”所以我改为“Selected”:/
  • @PierrePellegrinoMilza:你的复选框怎么可能没有 Checked 属性。看这里msdn.microsoft.com/en-us/library/…
  • @PierrePellegrinoMilza:让我们假设它不存在,然后进行铸造((CheckBox)CheckBoxList1.Items[j]).Checked
  • 我刚刚在MSDN 上发现: CheckBoxList 控件提供了一个多选复选框组,可以通过数据绑定动态生成。它包含一个 Items 集合,其中的成员对应于列表中的各个项目。要确定检查了哪些项目,请遍历集合并测试列表中每个项目的 Selected 属性。
  • 在 MSDN 示例 (msdn.microsoft.com/en-us/library/…) 中,他们还为 CheckBoxList 使用了 Selected 属性。
【解决方案2】:
protected void CheckBoxList1_SelectedIndexChanged(object sender, EventArgs e)
{
        foreach (ListItem item in CheckBoxList1.Items)
        {
            if (item.Selected == true)
            {
                //Response.Write(item.Value);
                LabelTest.Text = item.Value;
            }
        } 
}

【讨论】:

    【解决方案3】:

    如果您在页面加载中添加复选框列表项,
    在页面加载中:

    private void Page_Load()
    {
        if (!IsPostBack)
        {
            // load only fist time 
            LaodCheckBoxList();
        }
    }
    

    由于您为 checkboxlist 启用 autopostback true,它将回发并重新创建所有列表项,您将丢失选择状态。

    【讨论】:

    • 谢谢,但我遇到了与使用“.Checked”时相同的问题:“blah blah 不包含“GetItemCheckState”的定义“:(
    • 我只是有这个确切的想法,但在这里没有看到答案:)
    【解决方案4】:

    据我所知,您的代码应该可以工作。 尝试使用 foreach 更改 for 循环

    foreach (ListItem itm in CheckBoxList1.Items)
    {             
        if (itm.Selected == true)             
        {                 
             TextBoxTest.Text = itm.Text;                 
             LabelTest.Text = itm.Value;             
        }         
    } 
    

    【讨论】:

    • 我尝试了 foreach 但不是您的方式,我正在尝试,谢谢! :)
    【解决方案5】:

    问题在于您将项目添加到 CheckBoxList 的方式。您在另一个主题中提供了代码。您应该做的是将该代码包含在其中:

    if (!IsPostBack)
    {
        ... your code to add items to the CheckBoxList
    }
    

    否则,您在每次回发时使用 Selected 属性的默认值 false 重新创建列表。

    【讨论】:

    • 非常感谢!你说对了 !我现在得到了复选框的实际数量。谢谢大佬,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2019-05-30
    • 1970-01-01
    • 1970-01-01
    • 2018-12-19
    • 1970-01-01
    • 1970-01-01
    • 2016-09-27
    • 2011-05-17
    相关资源
    最近更新 更多