0

我有一个包含来自 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;
                            }
                        }
                    }
             }



     }
 }

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

4

3 回答 3

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);
    }
}
于 2013-06-13T08:47:10.703 回答
1

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

另外我猜你的代码可以用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;
           }
        }

}

于 2013-06-14T09:54:45.397 回答
0

为列表框设置SelectionMode="Multiple"

于 2013-06-13T09:34:27.843 回答