CheckBoxList的选中选项未在页面加载时填充

时间:2017-02-23 13:30:55

标签: c# jquery asp.net webforms

在我的aspx上,我有以下内容:

<asp:CheckBoxList ID="MyCheckBoxList" runat="server" SelectionMode="Multiple">
</asp:CheckBoxList>

然后在后端beofore loading我有这个代码:

var pq = from p in MyQuery select p.fullname;

然后我这样做:

var dt = new DataTable();
dt.Columns.Add("Users");

foreach (var p in pq)
{
    dt.Rows.Add(new object[] { string.Format(p, p) });
}

MyCheckBoxList.DataSource = dt;
foreach (var checkedItem in this.MyCheckBoxList.Items.Cast<ListItem>())
{
    checkedItem.Enabled = true;
    checkedItem.Selected = true;
}

MyCheckBoxList.DataBind();

它遍历我的所有checkboxlist项并将selected设置为true但是当我检查我的.aspx时,不会选中复选框。你能告诉我我在这里错过了什么吗?

抱歉这件事丢失了:

3 个答案:

答案 0 :(得分:0)

您当前代码的问题是您的CheckBox列表没有绑定,并且您正在尝试设置它的项值,您应该先绑定它然后调用foreach。这应该给你预期的输出: -

var pq = from p in MyQuery select new { Name = p.fullname };
MyCheckBoxList.DataSource = pq ;
MyCheckBoxList.DataTextField = "Name";
MyCheckBoxList.DataValueField = "Name";
MyCheckBoxList.DataBind(); //You should call DataBind here.
foreach (var checkedItem in this.MyCheckBoxList.Items.Cast<ListItem>())
{
    checkedItem.Enabled = true;
    checkedItem.Selected = true;
}

答案 1 :(得分:0)

尝试将解决方案更改为此

var pq = from p in MyQuery select p.fullname;
foreach (var p in pq)
{
    ListItem chkBox = new ListItem(p, p, true);
    chkBox.Selected = true;
    MyCheckBoxList.Items.Add(chkBox);  
}

(无需数据代码)

我没有测试,但应该做你想做的事。

答案 2 :(得分:0)

问题在于IQueryable ..所以这样做可以解决它.. Per Elmer Dantas回答。

 var pq = new List<string>(PersonQuery.Select(person => person.fullname));
                    foreach (var chkBox in pq.Select(p => new ListItem(p, p, true))) {
                        chkBox.Selected = true;
                        MyCheckBoxList.Items.Add(chkBox);
                    }