2013-06-13 49 views
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; 
          } 
         } 
        } 
      } 



    } 
} 

它不給我任何錯誤,也沒有選擇任何項目。我嘗試了幾種方法,仍然沒有工作。任何想法?

+1

你怎麼填'ListBox1.Items'收藏? –

+0

@Knaģis它與數據庫表中的數據綁定。 Atrh

+0

您確定您的代碼在AFTER後運行你的ListBox是DataBound。從我所看到的情況來看,似乎有所懷疑 – jbl

回答

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

}

+0

謝謝......它的工作原理.. – Atrh

+0

@Atrh thx爲後續行動。那麼你可以接受答案 – jbl

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

設置SelectionMode="Multiple"的列表框。

+1

但是OP甚至可以通過編程來設置它,就像你在他的代碼中看到的那樣:'ListBox1.SelectionMode = ListSelectionMode.Multiple;' –

+0

對不起,我還沒有看到。 –

相關問題