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

1

この項目選択コードを PageLoad から削除し、別のメソッド (たとえばSelectItems) に配置します。ページのどこかに 1 つ以上の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 に答える