为什么列表框多个选择不适用于页面加载?

时间:2013-06-13 08:42:09

标签: c# asp.net .net

我有一个包含SQL DB数据的列表框。在页面加载时,我想根据查询结果中的数据选择多个项目。它没有给我任何错误,也没有工作。 这是代码。

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack){

             DataTable userinfo = AppDataAccess.retrieveUsers(id);
                   foreach (DataRow row in userinfo.Rows)
            {
              string group = row["GroupNumber"].ToString();
                List<string> val = group.Split(',').ToList();

             if (val != null)
                    {
                        ListBox1.SelectionMode = ListSelectionMode.Multiple;

                        //loop to select multiple items
                        foreach (string per in val)
                        {
                            if (ListBox1.Items.FindByValue(per.ToString()) != null)
                            {
                                ListBox1.Items.FindByValue(per.ToString()).Selected = true;
                            }
                        }
                    }
             }



     }
 }

它没有给我任何错误,也没有选择任何项目。我尝试了几种方法,仍然无法正常工作。有什么想法吗?

3 个答案:

答案 0 :(得分:2)

您可以反过来尝试,循环所有ListItems并设置每个Selected属性:

foreach(DataRow row in userinfo.Rows)
{
    string group = row.Field<String>("GroupNumber");
    string[] vals = group.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
    foreach(ListItem item in ListBox1.Items)
    {
        item.Selected = vals.Contains(item.Value);
    }
}

答案 1 :(得分:1)

从您的PageLoad中删除此项目选举代码并将其放入另一种方法(例如SelectItems) 在您网页的某个位置,您应该有一个或多个ListBox1.DataBind();来电。 在这些ListBox1.DataBind();调用之后立即调用SelectItems。

另外我猜你的代码可以用Linq

这样编写
public void SelectItems()
{
 ListBox1.SelectionMode = ListSelectionMode.Multiple;
 var userinfos = AppDataAccess.retrieveUsers(id);

 var val = userInfos.Rows.SelectMany(r=>r["GroupNumber"].ToString().Split(','))
    .Distinct().ToList()

  //loop to select multiple items // could also be converted to Linq. Not sure it would be useful
  foreach (string per in val)
      {
       if (ListBox1.Items.FindByValue(per.ToString()) != null)
          {
           ListBox1.Items.FindByValue(per.ToString()).Selected = true;
           }
        }

}

答案 2 :(得分:0)

为ListBox设置SelectionMode="Multiple"