2012-06-07 3 views
1

일부 열을 편집 할 수있는 DataGridview가 있습니다. Datagrid는 자동으로 하단에 새로운 행을 추가합니다. 버튼 클릭시 데이터베이스에 그리드의 내용을 삽입하고 싶습니다. 그러나 각 루프에 대한 삽입 쿼리를 작성할 때 botton의 커밋되지 않은 행 때문에 예외가 throw됩니다. 예외 : 객체 참조가 객체의 인스턴스로 설정되지 않았습니다. 날이 문제를 해결 도와주세요 .. 코드는 여기DataGridview에 추가 된 비공 인 행의 예외

private void btn_save_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     con.Open(); 
     cmd = new SqlCommand("Select SupplierId from tbl_Supplier where SupplierName ='" + cmbSupplierName.Text + "'", con); 
     sdr = cmd.ExecuteReader(); 
     if (sdr.HasRows) 
     { 
      while (sdr.Read()) 
      { 
       string sup_id = sdr["SupplierId"].ToString(); 
       //txt_id.Text = sup_id; 
      } 
     } 

     foreach (DataGridViewRow row in grdPurchase.Rows) 
     { 
      string material_id = row.Cells[2].Value.ToString(); 
      int m_id = int.Parse(material_id); 
      string Quantity = row.Cells[3].Value.ToString(); 
      float m_quantity = float.Parse(Quantity); 
      string rate = row.Cells[4].Value.ToString(); 
      float m_rate = float.Parse(rate); 
      string total = row.Cells[5].Value.ToString(); 
      float m_total = float.Parse(total); 
      //string bill = txt_billno.Text; 
      int supplier_id = int.Parse(sup_id); 
      //string date = dtp_Purchase.Text; 

      // dt.Rows.Add(supplier_id, bill, m_id, m_quantity, m_rate, m_total, date); 
      String query = "insert into tbl_Purchase (SupplierId,MaterialId,BillNo,Quantity,Rate,Total,Date) values(" + supplier_id + "," + m_id + ",'" + txt_billno.Text + "'," + m_quantity + "," + m_rate + "," + m_total + ",'" + dtp_Purchase.Text + "')"; 
      cmd = new SqlCommand(query, con); 
      cmd.ExecuteNonQuery(); 
       //object id = cmd.ExecuteScalar(); 
       // string purchase_id = id.ToString(); 
      MessageBox.Show("Inserted: "); 
     } 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message.ToString()); 
    } 
    finally 
    { 
     sdr.Close(); 
     con.Close(); 
    } 
} 
+0

당신이 무엇을하고 있는지 보여, 당신은 그 일을하는 방법, 당신은 우리에게 불가능한 질문을한다. – Arran

+0

코드의 관련 부분을 표시하십시오 ... – walther

답변

0

당신은 IsNewRow 속성을 사용하여 새 행 필터링 할 수 있습니다 : 그것은 정상적인 밤은

foreach (DataGridViewRow row in grdPurchase.Rows) 
{ 
    if (row.IsNewRow) 
    { 
     continue; 
    } 
    ... 
+0

어떻게 작동합니까? IsNewRow 속성은 무엇을합니까? 왜냐하면 나는 IsNewRow를 시도했지만 .. .. ( – user1400604

+0

링크 된 문서에서 : "새 레코드 행은 행 컬렉션에 있기 때문에 IsNewRow 속성을 사용하여 행이 새로운 레코드 행인지 또는 채워진 행인지 확인합니다 행에 대한 데이터 입력이 시작될 때 행이 새로운 행으로 중지됩니다. " – stuartd

0

을의 GridView이를 automaticly 행을 추가하는 것이. 데이터 소스에서이 행을 사용할 수 없습니까? GridView는 DataSource의 뷰일 뿐이므로 문제가있을 수 있습니다. 어떤 데이터 소스를 사용하고 있습니까? 당신이 수업을 만들면 더욱 아름답습니다. 각 행은 객체로 표시되고 DataSource는 List입니다. GridView에서 모든 Datas를 얻으려면 List를 사용하거나 클래스의 유형에있는 각 DataRow를 형 변환 할 수 있습니다. 일부 코드없이

관련