CheckBoxList ListItem在动态添加数据后始终为0

Ame*_*sed 9 c# asp.net sharepoint sharepoint-2010 comboboxlist

我在代码中有以下aspx代码.我想在ListItem复选框中添加复选框, ColumnsList并在按钮单击时找到所有选中的复选框.

但是当我尝试获取所选项目按钮时,单击ColumnsList计数变为0.

<asp:checkboxlist runat="server" EnableViewState="true" id="ColumnsList"/>
Run Code Online (Sandbox Code Playgroud)

在后面的代码中,我将数据添加到我的ColumnsList,如下所示

public override void OnLoad()
{
    if(!this.IsPostBack)
    {
       this.ColumnsList.Items.Add(new ListItem { Text= "Text1",  Value = "value1"    });
       this.ColumnsList.Items.Add(new ListItem { Text= "Text2",  Value = "value2"  });
    }
}
Run Code Online (Sandbox Code Playgroud)

//这是按钮单击侦听器

private void Button_Click(object sender, EventArgs eventArgs)
{
    // Count is 0 instead of 2
    var count = this.ColumnsList.Items.Count;
    foreach(ListItem item in this.ColumnsList.Items)
    {
        var selected = item.Selected;
        // add selected to a list..etc

    }
}           
Run Code Online (Sandbox Code Playgroud)

注意:该应用程序已在部署点2010中部署.

Amn*_*oel 6

我试图模拟你正在尝试的东西,这是一步一步的解决方案.

第1步:override OnLoad()您可以使用Page_Load()方法向ComboBoxList控件添加项目,而不是创建方法, 如下所示.在创建新的时,不要 忘记comma介于TextValue属性之间ListItem.

protected void Page_Load(object sender, EventArgs e)
{
    if(!this.IsPostBack)
    {
        this.ColumnsList.Items.Add(new ListItem { Text= "Text1",  Value = "value1" });
        this.ColumnsList.Items.Add(new ListItem { Text = "Text2", Value = "value2" }); 
        this.ColumnsList.Items.Add(new ListItem { Text = "Text3", Value = "value3" });
        this.ColumnsList.Items.Add(new ListItem { Text = "Text4", Value = "value4" });
    }
}
Run Code Online (Sandbox Code Playgroud)

第2步:在此之后,我创建了一个像你这样的按钮点击事件,但是只在那里写了一行来获取所选项目的数量,如下所示.

protected void Button1_Click(object sender, EventArgs e)
{
    var count = this.ColumnsList.Items.Cast<ListItem>().Count(li => li.Selected);
}
Run Code Online (Sandbox Code Playgroud)

注意:检查按钮单击事件.this.ColumnsList.Items.Count将返回您在ComboBoxList中的项目的计数,并item.Selected从循环将告诉您该项目是否被选中.但是var selected,当您覆盖每个项目的值时,它将为您提供最后一项的状态.


Ame*_*sed 4

我最终将加载列表的代码从 pageload 移动到 OnInit ,如下所示,它起作用了。

protected override void OnInit(EventArgs e)
{
  this.ColumnsList.Items.Add(new ListItem { Text= "Text1",  Value = "value1"    });
  this.ColumnsList.Items.Add(new ListItem { Text= "Text2",  Value = "value2"  });
Run Code Online (Sandbox Code Playgroud)

}