2012-10-16 3 views
-1

나는 손으로 프로그램 한 gridview를 가지고있다. 모든 이벤트에 대한 모든 메소드가 있지만 모든 것이 작동하는 것처럼 보이지만 RowUpdating 이벤트입니다. 이 오류가 발생합니다 : "개체 참조가 개체의 인스턴스로 설정되지 않았습니다." 나는 여기서 무슨 일이 일어나는지 알 수 없다. 모든 컨트롤에는 값이 입력되어 있습니다. 여기 내 코드가있다. 내가 도대체 ​​뭘 잘못하고있는 겁니까??Gridview RowUpdating 이벤트에 오류가 발생했습니다.

this page에 따르면
protected void GridView1_RowUpdated(object sender, GridViewUpdatedEventArgs e) 
    { 
     fill_grid(); 
     //Reset the edit index. 
     GridView1.EditIndex = -1; 
     //Bind data to the GridView control. 
     GridView1.DataBind(); 
    } 
+2

그리고있는 선하는 오류를 던지고있다 : 다음과 같은

? 분명히 도움이 될 수있는 예외 스택 트랙을 복사하여 붙여 넣을 수 있습니다. –

+0

'sqlConnection1'이 (가) null이 아닌가? –

+0

sqlConnection1은 페이지의 글로벌 연결 문자열입니다. 이 페이지에서 몇 번 사용합니다. – briskovich

답변

0

, 당신은 Keys, OldValues 당신에게 반환됩니다 바인딩 한 할 수있는 행의 값 및 NewValues 특성 : 여기

protected void Gridview1_RowUpdating(object sender, GridViewUpdateEventArgs e) 
     { 

      SqlCommand cmd = new SqlCommand(); 

      cmd.CommandText = "update t_sizer_calibration " + 
           "set " + 
           "date = @date " + 
           " time = @time, " + 
           "name = @name, " + 
           "lane = @lane, " + 
           "carriers = @carrier, " + 
           "rev = @REV, " + 
           "new_tare = @n_tare, " + 
           "current_tare = @ctare, " + 
           "min = @min, " + 
           "max = @max," + 
           "sd = @sd, " + 
           "wai = @wai, " + 
           "bad_carriers = @badcar, " + 
           "comments = @comments " + 
           "where calibration_id = @calibration_id"; 

      // define parameters 
      cmd.Parameters.Add("@calibration_id", SqlDbType.VarChar).Value = glblID.Text; 
      cmd.Parameters.Add("@date", SqlDbType.VarChar).Value = gtxtDate.Text; 
      cmd.Parameters.Add("@time", SqlDbType.VarChar).Value = gtxtTime.Text; 
      cmd.Parameters.Add("@name", SqlDbType.Int).Value = glblName.Text; 
      cmd.Parameters.Add("@lane", SqlDbType.Int).Value = Convert.ToInt32(gtxtLane.Text); 
      cmd.Parameters.Add("@carrier", SqlDbType.Decimal).Value = Convert.ToDecimal(gtxtCarriers.Text); 
      cmd.Parameters.Add("@REV", SqlDbType.Decimal).Value = Convert.ToDecimal(gtxtREV.Text); 
      cmd.Parameters.Add("@n_tare", SqlDbType.Decimal).Value = Convert.ToDecimal(gtxtN_Tare.Text); 
      cmd.Parameters.Add("@ctare", SqlDbType.Decimal).Value = Convert.ToDecimal(gtxtC_Tare.Text); 
      cmd.Parameters.Add("@min", SqlDbType.Decimal).Value = Convert.ToDecimal(gtxtMin.Text); 
      cmd.Parameters.Add("@max", SqlDbType.Decimal).Value = Convert.ToDecimal(gtxtMax.Text); 
      cmd.Parameters.Add("@sd", SqlDbType.Decimal).Value = Convert.ToDecimal(gtxtSD.Text); 
      cmd.Parameters.Add("@wai", SqlDbType.Decimal).Value = Convert.ToDecimal(gtxtWAI.Text); 
      cmd.Parameters.Add("@badcar", SqlDbType.Int).Value = Convert.ToInt32(gtxtBadCarriers.Text); 
      cmd.Parameters.Add("@comments", SqlDbType.VarChar).Value = gtxtComments.Text; 

      cmd.CommandType = CommandType.Text; 
      cmd.Connection = this.sqlConnection1; 
      this.sqlConnection1.Open(); 
      //execute insert statement 
      cmd.ExecuteNonQuery(); 
      this.sqlConnection1.Close();   
      //re-populate grid 
      fill_grid(); 
      GridView1.EditIndex = -1; 
      GridView1.DataBind(); 

     } 

너무 내 rowupdated 방법 이벤트 args. 따라서 컨트롤 값에 액세스 할 필요가 전혀 없습니다.

내가 좋아하는 뭔가를 시도 할 것입니다 :

cmd.Parameters.Add("@calibration_id", SqlDbType.VarChar).Value = e.NewValues["ID"]; 
cmd.Parameters.Add("@date", SqlDbType.VarChar).Value = e.NewValues["date"]; 

을 ... 그리고 그 어디를 얻을 수 있는지 확인합니다.

+0

열에 바인딩 된 템플릿 필드의 컨트롤입니다. – briskovich

+0

나는 당신을 올바르게 이해한다고 가정 할 때 위에서 말한 것이 적용됩니다. 이벤트를 발생시킨 특정 눈금보기 항목에 속한 템플릿의 컨트롤의 특정 인스턴스에 액세스해야합니다. 각 컨트롤에 대해 'e.Item.FindControl'을 수행하면됩니다. 이 작업을 수행하지 않으면 변수가 할당되지 않으며 해당 속성에 액세스하려고하면 null 참조 예외 (수신 한 값)가 반환됩니다. –

+0

Error : GridViewUpdateEventArgs에 "Item"에 대한 정의가없고 확장 메서드가 없습니다 ... 어셈블리 참조가 누락 되었습니까? – briskovich

0

나는 그것을 알아 냈다. FindControl을 사용하여 업데이트 문에 대한 새 값을 가져와야합니다.

GridViewRow row = (GridViewRow)GridView1.Rows[e.RowIndex]; 
      int id = Int32.Parse(GridView1.DataKeys[e.RowIndex].Value.ToString()); 
      TextBox comm = (TextBox)row.FindControl("gtxtComments"); 
      TextBox date = (TextBox)row.FindControl("gtxtDate"); ....... and so on. 
관련 문제