3

我正在尝试从复选框列表中获取多个值并将它们添加到列表中,但是即使列表包含适当的计数值,选中的值也总是错误的。

要填充的代码:

Guid userGuid = (Guid)Membership.GetUser().ProviderUserKey;
HelpingOthersEntities helpData = new HelpingOthersEntities();
List<LookupStoreLocationsByUserName> theDataSet = helpData.LookupStoreLocationsByUserName(userGuid).ToList<LookupStoreLocationsByUserName>();
locCkBox.DataSource = theDataSet;
locCkBox.DataTextField = "slAddress";
locCkBox.DataValueField = "storeLocationID";
locCkBox.DataBind();

添加到列表的代码:

List<int> locList = new List<int>();

for (int x = 0; x < locCkBox.Items.Count; x++){
   if(locCkBox.Items[x].Selected){
        locList.Add(int.Parse(locCkBox.Items[x].Value));
    }
}

我遇到的问题是我无法进入items.selected 我的价值总是错误的。

我已经尝试从回发填充复选框,但我得到了相同的结果。我的列表给了我适当.Count数量的值,但是items.selected= false?

我也尝试了一个 foreach 循环来添加到列表中,但我一遍又一遍地得到相同的结果。我错过了一个活动还是什么?

4

2 回答 2

11

我将在这里猜测一下,并说在 pageload 事件中调用了执行填充内容的代码,因此您有以下内容。

private void Page_Load()
{
    Guid userGuid = (Guid)Membership.GetUser().ProviderUserKey;
    HelpingOthersEntities helpData = new HelpingOthersEntities();
    List<LookupStoreLocationsByUserName> theDataSet = helpData.LookupStoreLocationsByUserName(userGuid).ToList<LookupStoreLocationsByUserName>();
    locCkBox.DataSource = theDataSet;
    locCkBox.DataTextField = "slAddress";
    locCkBox.DataValueField = "storeLocationID";
    locCkBox.DataBind();
}

如果是这种情况,那么您可以有效地在每个请求上写入回发数据。要解决这个问题,您只需要在不是回发时执行数据绑定,因此您需要将上面的代码更改为

private void Page_Load()
{
    if (!IsPostBack)
    {
        Guid userGuid = (Guid)Membership.GetUser().ProviderUserKey;
        HelpingOthersEntities helpData = new HelpingOthersEntities();
        List<LookupStoreLocationsByUserName> theDataSet = helpData.LookupStoreLocationsByUserName(userGuid).ToList<LookupStoreLocationsByUserName>();
        locCkBox.DataSource = theDataSet;
        locCkBox.DataTextField = "slAddress";
        locCkBox.DataValueField = "storeLocationID";
        locCkBox.DataBind();
    }
}

然后,您应该能够测试项目的 Selected 属性。我也可能会将您用于测试所选内容的代码更改为类似

List<int> locList = new List<int>();
foreach(var item in locCkBox.Items)
{
  if(item.Selected)
  {
    locList.Add(int.Parse(item.Value));
  }
}

或者,如果您使用 .NET 版本并提供 LINQ

List<int> locList = new List<int>();
(from item in locCkBox.Items where item.Selected == true select item).ForEach(i => locList.Add(i.Value));
于 2013-04-04T02:07:49.420 回答
2

确保在绑定checkboxlist页面内加载时已设置此检查。

if (!Page.IsPostBack)
{
...bind your data
}

这应该可以解决问题。

于 2015-08-28T03:49:59.810 回答