2014-09-22 59 views
0

我有一個加載的DataGrid。在該DataGrid中,第一列是CheckBox,第二列是「Name」。我還在數據庫中保存了一個字段「名稱」。在這裏,我想讓CheckBox被檢查,如果名稱等於我存儲在數據庫中的數據。如何使複選框根據gridview中的一些條件進行檢查

這裏我的問題是,我只能得到一個複選框來檢查。 例如:[如果我的預期結果是第一,第二和第三個複選框要檢查,但我只得到第三個複選框。 ]

我的示例代碼是

foreach (GridViewRow row in GrdProduct.Rows) 
    { 
     if (row.RowType == DataControlRowType.DataRow) 
     { 
      Label lblproduct = (Label)row.FindControl("lblProduct"); 
      CheckBox chkSelect = (CheckBox)row.FindControl("chkSelectAll"); 

      for (int rowIndex = 0; rowIndex < dt.Rows.Count; rowIndex++) 
      { 
       DataRow r = dt.Rows[rowIndex]; 

       if (Convert.ToString(r["productName"]) == lblproduct.Text) 
       { 
        chkSelect.Checked = true; 

       } 
       else 
       { 
        chkSelect.Checked = false; 
       } 
      } 

     } 
+0

您是否嘗試過調試以查看每個迭代中是否有正確的標籤和複選框引用? – Pavenhimself 2014-09-22 10:43:20

回答

0

最後我得到了解決......這簡直是去除else部分

else 
      { 
       chkSelect.Checked = false; } 

-- 

謝謝大家......

0

對不起,我是個瞎子。你正在循環數據行,當然你很可能只有一個匹配。在所有其他情況下,它立即變得無法檢查。使用以下命令:

 foreach (GridViewRow row in GrdProduct.Rows) 
    { 
     if (row.RowType == DataControlRowType.DataRow) 
     { 
      Label lblproduct = (Label)row.FindControl("lblProduct"); 
      CheckBox chkSelect = (CheckBox)row.FindControl("chkSelectAll"); 

      chkSelect.Checked = false; 

      for (int rowIndex = 0; rowIndex < dt.Rows.Count || !chkSelect.Checked; rowIndex++) 
      { 
       DataRow r = dt.Rows[rowIndex]; 

       if (Convert.ToString(r["productName"]) == lblproduct.Text) 
       { 
        chkSelect.Checked = true; 

       } 
      } 

     } 

阿爾斯比較字符串時,我建議http://msdn.microsoft.com/en-us/library/system.string.equals(v=vs.110).aspx

相比,你會在網格中的數據和控制做我還建議額外的驗證什麼。

相關問題