2

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

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 有一个真正的自动回发。

4

5 回答 5

3

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

 if (CheckBoxList1.Items[j].Checked)

但我现在无法测试这个。

于 2012-06-01T09:56:03.897 回答
3

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

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

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

于 2012-06-01T10:24:36.287 回答
1
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;
            }
        } 
}
于 2012-06-01T09:57:02.727 回答
1

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

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

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

于 2012-06-01T09:57:47.300 回答
1

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

foreach (ListItem itm in CheckBoxList1.Items)
{             
    if (itm.Selected == true)             
    {                 
         TextBoxTest.Text = itm.Text;                 
         LabelTest.Text = itm.Value;             
    }         
} 
于 2012-06-01T10:13:42.457 回答