2011-04-14 10 views
0

データベース内の列を更新しようとしているか、グリッドビューでチェックボックスにチェックが入っていません。また、更新は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が表示されます。選択されたすべてのIDではなく、グリッドビューの最も低いチェック済み注文のIDのみです。

よろしくお願いします。Mati

+0

チェックヌル)とあなたが検索control.Andに有効な値を提供するかどうかもあなたはこのエラーを取得しているもののラインを教えて、ここに私のコードは、(必要であれば、最大投票)です。 – varadarajan

+0

'GridViewRow r'変数を使用していないようです。 – jfs

+0

@jfs:true、if((CheckBox)r.Cells [0] .FindControl( "CheckBoxATH"))。チェックした== true) {} '問題が残っています。まだオブジェクトが設定されていません... – Dieter

答えて

1

ねえ、私は解決策を見つけました。 checkBoxATH、受注のための

 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

私も同じ問題に直面していました。私は、チェックボックスの状態は、それがnull値を与えるよりも、変更されていないので、私はformattedvalueを使用していた。ここ

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

...それはまたあなたのPROBを解決を願って、このようにそれを解決しました。 DataGridViewのチェックボックスセルで

チェックボックスは、時にはそれが値Trueを与えるか、時にはそれがチェック値を与えるよりも、チェックされている場合は、神秘的な方法で動作します...

+0

ここでは、セル["CheckBoxATH"]で "CheckBoxATH"を直接与えることができるときに、なぜfindcontrolを使用しているのかわかりません。 –

+0

私は使用しているので、このコードは努力していただきありがとうございますDataGridViewではなくGridViewであり、.FormattedValueも認識しません。 – Dieter

関連する問題