【问题标题】:CheckBoxList's checked selection not populating on page loadCheckBoxList 的选中选项未在页面加载时填充
【发布时间】:2017-02-23 13:30:54
【问题描述】:

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

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

然后在加载之前的后端我有这个代码:

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();

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

很抱歉,这里遗漏了:

【问题讨论】:

  • 你在用pq 做什么以及你在哪里写了这个foreach代码?
  • 您需要提供有关您的解决方案的更多详细信息
  • @RahulSingh 抱歉更新了代码。
  • @ElmerDantas 请查看更新。抱歉忘记了一段代码。
  • @AmeerKabeer - 仍然不完整,在哪种情况下您会调用它?像Page_Load 什么的?另外,为什么要填写 DataTable?您可以直接将pq 分配给复选框列表。

标签: c# jquery asp.net webforms


【解决方案1】:

尝试将您的解决方案更改为此

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);  
}

(无需数据绑定)

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

【讨论】:

  • 我知道你在这里做了什么,但这似乎也不起作用。只是为了让您知道 .fullname 是一个名称列表。
  • 我明白了...创建一个名称列表,其文本和值为 p(全名)...这应该可以工作 o.O...您在使用 IsPostBack 吗? (正如我们所说的网络表单)
  • !IspostBack ... 不回帖。未检查任何内容。
  • 我的意思是!IsPostBack 也写了没有! 只是想知道你是否正在使用它......只是想知道这怎么不起作用......真的很奇怪
  • 你肯定遗漏了一些东西......我刚刚在这里测试并正常工作
【解决方案2】:

您当前代码的问题是您的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;
}

【讨论】:

  • @AmeerKabeer - 什么没用?您是否接受了更新后的pq 查询?
  • 是的,没有从名称列表中选择任何内容。
  • @AmeerKabeer - 你在这样做吗select new { Name = p.fullname };?这很重要。另外,您遇到了什么异常?
  • 我没有得到任何异常 .. 只是未选中复选框。我完全按照你说的做了。
  • @AmeerKabeer - 不,你没有。我已经测试了这段代码并且它工作正常。肯定有你遗漏的东西。
【解决方案3】:

问题在于 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);
                    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 2017-10-31
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多