2011-04-14 3 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가 표시됩니다. 모든 선택된 ID가 아니라 가장 낮은 체크 된 주문 ID입니다. 나에게 Null 참조 같은

감사 마티

+0

체크 널은 당신이 발견 통제 센터에 유효한 값을 제공 여부를이 오류가 무엇 라인도 알려주십시오. – varadarajan

+0

'GridViewRow r' 변수를 사용하지 않는 것 같습니다. – jfs

+0

@jfs : true, if ((CheckBox) r.Cells [0] .FindControl ("CheckBoxATH")). Checked == true) {}'내 코드에 문제가 남아 있습니다. 아직 개체가 ...로 설정되지 않았습니다. – Dieter

답변

1

야, 그래서 나는 해결책을 발견했습니다. 여기에 내 코드 (만약 당신이 좋아하면 투표를)입니다) checkBoxATH, OrderID를위한

 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

소리. 업데이트 문에 사용 된 모든 참조를 확인하고 null이 아닌지 확인하십시오.

// 다니엘

0

나는 또한 같은 문제에 직면했다. 체크 박스의 상태는 null 값을 제공보다 변경되지 않기 때문에 나는 .. 그것은 또한 당신의 확률값을 해결 희망, 그것을 여기에 내가 formattedvalue 사용했다

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

를 이런 식으로 해결했다. 확인란이보다 선택된 경우 신비한 방법으로 DataGridView에 체크 박스 세포 작품에서

는, 때로는 진정한 가치를 제공하거나 경우에 따라서는 값 확인 제공합니다 ...

+0

그리고 여기 왜 셀 [ "CheckBoxATH"]에서 "CheckBoxATH"를 직접 줄 수있을 때 findcontrol을 사용하는지 알지 못합니다 ... –

+0

노력을 해주셔서 감사합니다. 그러나이 코드는 나를 사용하기 때문에 작동하지 않습니다. DataGridView가 아닌 ​​GridView이며 .FormattedValue도 인식하지 못합니다. – Dieter

관련 문제