2017-02-04 4 views
0
private void VPfn_GenInvoice() 
    { 
     int iid = Convert.ToInt16(tid.Text); 
     int cid = Convert.ToInt16(tcid.Text); 
     double subtotal = Convert.ToDouble(tst.Text); 
     double atax = Convert.ToDouble(tat.Text); 
     double discount = Convert.ToDouble(tdis.Text); 
     double total = Convert.ToDouble(ttotal.Text); 

     StringBuilder iQ = new StringBuilder(); 

     foreach(DataRow x in invoice_data.Rows) 
     { 
      int iiid = VPfunctions.VPfn_N2ID_itm(x["item_name"].ToString()); 
      string dQuery = "INSERT INTO `invoice_data` (id, sr, item_id, item_qty, item_unit, item_vat, amount) " + 
       "VALUES(" + iid + ", " + x["serial_number"].ToString() + ", " + iiid + ", " + x["item_qty"].ToString() 
       + ", " + x["item_unit"].ToString() + ", " + x["item_vat"].ToString() + ", " + x["amount"].ToString() + ")"; 
      iQ.Append(dQuery); 
      iQ.AppendLine(); 
     } 

     //Updating main Invoice DB 
     string query = "INSERT INTO `invoice` (id, cusid, cdate, mdate, subtotal, atax, discount, total) VALUES (?A,?B,?C,?D,?E,?F,?G,?H)"; 
     xxtb.Text = iQ.ToString(); 
     /** 
     try 
     { 
      //inserting into invoice 
      con.Open(); 
      MySqlCommand xv = new MySqlCommand(query, con); 
      xv.Parameters.AddWithValue("?A", iid.ToString()); 
      xv.Parameters.AddWithValue("?B", cid.ToString()); 
      xv.Parameters.AddWithValue("?C", DateTime.Now.ToString()); 
      xv.Parameters.AddWithValue("?D", "-"); 
      xv.Parameters.AddWithValue("?E", subtotal.ToString()); 
      xv.Parameters.AddWithValue("?F", atax.ToString()); 
      xv.Parameters.AddWithValue("?G", discount.ToString()); 
      xv.Parameters.AddWithValue("?H", total.ToString()); 
      xv.ExecuteNonQuery(); 

      //Inserting into invoice_data 
      MySqlCommand ixv = new MySqlCommand(iQ.ToString(), con); 
      ixv.ExecuteNonQuery(); 
     } 
     catch 
     { 

     } 
     finally 
     { 
      con.Close(); 
     } **/ 
    } 

, и я получаю ошибку следующим образом: System.InvalidCastException: «Не удается привести объект типа„System.Windows.Forms.DataGridViewRow“к типу» System.Data.DataRow ''System.InvalidCastException при работе с DataGridView

Теперь я пытаюсь сделать программное обеспечение для выставления счетов для своих собственных, но я получаю эту ошибку и да, я использую Visual studio 2017RC и Windows 10 64bit.

ответ

0

x переменных в вашем Еогеаспе должен быть типа DataGridViewRow, изменять свой код, как показано ниже:

foreach(DataGridViewRow x in invoice_data.Rows) 
0

Я думаю, что invoice_data.Rows представляет собой набор DataGridViewRow и ваш Еогеасп пытается бросить его DataRow. Работает ли это, если вы измените свое Еогеасп к этому:

foreach(DataGridViewRow x in invoice_data.Rows) 
... 
+0

Впоследствии, как я могу использовать x? получать значения? –

+0

@VishalPatel: Этот ответ должен помочь с этим: http://stackoverflow.com/a/6488000/5569892 – Freakshow

0
foreach(DataRow x in invoice_data.Rows) 

Эта линия имеет неправильный тип для x. DataRow - это строка в абстрактном DataTable, а не элемент GUI DataGridView. foreach делает беззвучный кастинг, как Ряды свойство возвращает объект типа DataGridViewRowCollection, и для обратной совместимости, этот тип реализует только IEnumerable и не IEnumerable<DataGridViewRow>. Вот почему компилятор не предупредил вас о некорректном литье.

Исправление поэтому легко:

foreach(DataGridViewRow x in invoice_data.Rows) 

Свойства на x немного отличаются, однако. Для получения данных необходимо использовать свойство Cells. Вы можете использовать либо имя столбца, либо индекс столбца. Один из них должен работать:

x.Cells["item_name"].ToString() 

x.Cells[0].ToString() 

условие имени является первым колонком.

+0

после этого, как я могу использовать x? получать значения? –

+0

@ VishalPatel Обновлен ответ. – IllidanS4

Смежные вопросы