在我的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时,不会选中复选框。你能告诉我我在这里错过了什么吗?
抱歉这件事丢失了:
答案 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);
}