2011-04-14 92 views
0

我试图更新基于我的数据库中的列或不在GridView中检查复选框。此更新仅在button_click后发生。问题可能是我的语法,所以如果有人能纠正我,那将非常感激。根据复选框的值更新列

看到这里我的代码:

protected void ButtonAfTeHalen_Click(object sender, EventArgs e) 
    { 
     foreach (GridViewRow r in GridViewOrders.Rows) 
     { 
      if (((CheckBox)r.Cells[0].FindControl("CheckBoxATH")).Checked == true 
         && (Label)r.Cells[3].FindControl("LabelOrderID") != null) 
      { 
       string conn2 = "Data Source=pc-..."; 
       CheckBox checkBoxATH = (CheckBox)GridViewOrders.FindControl("CheckBoxATH"); 
       Label orderID = (Label)r.Cells[3].FindControl("LabelOrderID"); 
       LabelTestID.Visible = true; 
       LabelTestID.Text = orderID.Text.ToString(); 

       System.Data.SqlClient.SqlConnection sqlConn10 = new System.Data.SqlClient.SqlConnection(conn2); 
       sqlConn10.Open(); 
       System.Data.SqlClient.SqlCommand updateCommand = 
        new System.Data.SqlClient.SqlCommand("UPDATE tblOrders SET Status= " + checkBoxATH.Checked + " WHERE [email protected]", sqlConn10); 
       updateCommand.Parameters.AddWithValue("@orderID", LabelTestID.Text); 
       updateCommand.ExecuteNonQuery(); 
      } 
     } 
    } 

错误说:对象引用不设置到对象的实例。

错误@更新语句。但它确实在标签上显示订单的ID。只有gridview中最低检查顺序的ID tho,不是所有选定的ID。

Regards Mati

+0

检查空的checkBoxATH,订单ID以及您是否在找control.And提供有效的值也告诉我们行你得到这个错误。 – varadarajan 2011-04-14 08:24:24

+0

看来你并没有使用'GridViewRow r'变量。 – jfs 2011-04-14 08:25:52

+0

@jfs:true,if if(((CheckBox)r.Cells [0] .FindControl(“CheckBoxATH”))。Checked == true) {}'在我的代码中,问题依然存在。 Still Object not set to ... – Dieter 2011-04-14 08:33:17

回答

1

嘿,我已经找到了解决办法。这里是我的代码(投票,如果你喜欢;))

 for (int i = 0; i < GridViewOrder.Rows.Count; i++) 
     { 
      CheckBox ck = (CheckBox)GridViewOrder.Rows[i].Cells[0].FindControl("CheckBoxATH"); 
      Label orderID = (Label)GridViewOrder.Rows[i].Cells[5].FindControl("LabelOrderID"); 

      if (ck != null) 
      { 
       string conn = "Data Source=pc-..."; 
       System.Data.SqlClient.SqlConnection sqlConn = new System.Data.SqlClient.SqlConnection(conn); 
       sqlConn.Open(); 
       System.Data.SqlClient.SqlCommand updateCommand = new System.Data.SqlClient.SqlCommand("UPDATE tblOrders SET tOrderATH = '" + ck.Checked + "' WHERE tOrderId= '" + orderID.Text + "'", sqlConn); 
       updateCommand.Parameters.AddWithValue("@orderID", orderID.Text); 
       updateCommand.ExecuteNonQuery(); 
      } 
     } 
0

听起来像是空引用给我。检查更新语句中使用的所有引用,并确保它们不为空。

//丹尼尔

0

我也面临同样的问题。我解决了它这种方式,希望它也能解决您的概率..

 if ((Boolean)((DataGridViewCheckBoxCell)r.Cells[0].FindControl("CheckBoxATH").FormattedValue) 
&& (Label)r.Cells[3].FindControl("LabelOrderID") != null) 

在这里,我已经使用FormattedValue的,因为该复选框的状态不改变比它给出了一个空值。

在一个神秘的方式datagridview的复选框电池的工作原理,如果复选框被选中相比有时它给出的值true或有时它给出的值检查...

+0

在这里,我不知道你为什么使用findcontrol,当你可以直接在单元[“CheckBoxATH”]给“CheckBoxATH”... – 2011-04-14 11:36:53

+0

谢谢你的努力,但这段代码不会为我工作,因为我使用一个GridView,而不是DataGridView,它也不会识别.FormattedValue。 – Dieter 2011-04-14 12:06:16