2011-07-20 63 views
3
<asp:TemplateField HeaderText="Select"> 
<ItemTemplate> 
<asp:CheckBox ID="chkSelected" runat="server" Checked="false"></asp:CheckBox> 
    </ItemTemplate> 
</asp:TemplateField> 

elow代碼的所有行工作正常,但有一個bug:迭代通過在GridView

如果Employee對象有返回5行,我試圖選中複選框基礎上的ID,而是其只匹配最後一個ID - 它假設檢查所有5行..

List<Employee> result = new List<Employee>(); 
long Id = (long)Session["Id"]; 
result = Employee.GetEmployeeById(Id); 

foreach (GridViewRow row in gv.Rows) 
{ 
    CheckBox chkBox = row.FindControl("chkSelected") as CheckBox; 
    if (c != null) 
    { 
     if (result.Count > 0) 
     { 
      foreach (Employee item in result) 
      { 
      Label Id = row.FindControl("lblId") as Label; 
      if (Id.Text == item.Id.ToString()) 
      { 
       chkBox.Checked = true; 
      } 
      else 
      { 
       chkBox.Checked = false; 
      } 
      } 
     } 

回答

4

看看你的邏輯 - 你只有一個複選框。您正在取消選中並檢查員工循環中的相同控件。每個網格行是否都有一個複選框,應根據員工列表中存在的條件來選擇?

foreach (GridViewRow row in gv.Rows) 
    { 
     Label Id = row.FindControl("lblId") as Label; 
     var result = Employee.GetEmployeeById(Id.Text); 
     if (result.Count > 0) 
     { 
      CheckBox chkBox = row.FindControl("chkSelected") as CheckBox; 
      if (chkBox != null) 
      { 
       chkBox.Checked = result.Any(x => x.Id.ToString() == Id.Text); 

      } 
     } 

    } 
+0

hmmm ... ic現在...但我如何迭代獲取gridviewrow中的複選框? –

+0

我用html標記解決了我的問題,回答你的問題是。 –

+0

我正在比較兩個id,gridviewrow中的一個id和我從員工對象foreach中獲得的其他id(Employee ....'我不確定你的代碼是否可以工作 –