2012-06-17 146 views
2

我正在开发一个应用程序在C#中,我使用datagridview和gridview第一列包含复选框,我想chech复选框是真实的或不是,但它给了我'对象引用未设置为对象的实例'。代码如下检查gridview列复选框

private void btnDelete_Click(object sender, EventArgs e) 
     { 
      StudentDAL s = new StudentDAL(); 

      try 
      { 
       for (int i = 0; i < this.dataGridView1.RowCount; i++) 
       { 

        if (!DBNull.Value.Equals(this.dataGridView1.Rows[i].Cells[0]) && (bool)this.dataGridView1.Rows[i].Cells[0].Value == true) 
        { 

         s.delete(Convert.ToInt32(this.dataGridView1.Rows[i].Cells[1].Value)); 
         i--; 

        } 

       } 
       this.dataGridView1.DataSource = s.getAll(); 

      } 
      catch (Exception nn) 
      { 


      } 


     } 

请帮帮我。

+0

你应该用'先拿到CheckBox控件FindControl()'方法,然后检查它是否被检查 –

回答

0

首先,你必须要找到你的CheckBox控件,那么你可以检查,检查或者不喜欢这样的:

Int32 i; 
    CheckBox k; 

    for (i = 0; i < GridView1.Rows.Count; i++) 
     { 
      k = ((CheckBox)(GridView1.Rows[i].Cells[0].FindControl("chk"))); 
      if (k.Checked == true) 
      { 
       //your code here 
      } 
      else 
      { 
       //your code here 
      } 
     } 
0

您正在尝试引用尚未初始化的对象(我相信在此实例中为Row [i])。

尝试在for循环中放置一个断点并逐步执行(F10)并检查我在什么位置引发异常。

+0

它第一次检查条件时会抛出异常 – Billz

+0

您可以发布堆栈跟踪吗? –

0

添加更多的验证

foreach (DataGridViewRow rw in this.dataGridView1.Rows) 
{ 
    if (rw.Cells.Count > 2 && 
     rw.Cells[0].Value != DBNull.Value && String.IsNullOrWhiteSpace(rw.Cells[0].Value.ToString()) && 
     ((bool)rw.Cells[0].Value) && 
      rw.Cells[1].Value != DBNull.Value && String.IsNullOrWhiteSpace(rw.Cells[1].Value.ToString())) 
    { 
      s.delete(Convert.ToInt32(rw.Cells[1].Value)); 

    } 
}