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を使用しています。

foreach(DataGridViewRow x in invoice_data.Rows) 

答えて

0

x変数は、以下のようにコードを修正し、タイプDataGridViewRowでなければなりません。 DataRow。

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

私の推測では、invoice_data.RowsがDataGridViewRowの集まりであり、あなたのforeachのはにキャストしようとしていることである:あなたのforeachの中

+0

どのように私はxを使うことができますか?値を取得するには? –

+0

@VishalPatel:この回答はそれを助ける必要があります:http://stackoverflow.com/a/6488000/5569892 – Freakshow

0
foreach(DataRow x in invoice_data.Rows) 

この行はxの間違った種類があります:あなたはこれにあなたのforeachを変更する場合には機能しません。 DataRowは、抽象的なDataTableの行であり、GUI要素DataGridViewではありません。 特性は、型DataGridViewRowCollectionのオブジェクトを返すようforeachは、サイレント鋳造を行い、および下位互換性のため、このタイプのみ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

関連する問題