2013-08-24 3 views
0

У меня есть два типа данных Table_1 и Table_2. Что случилось с моим кодом? Я не могу добавить в Table_2 сумму акций из Table_1?Вычислить 2 dataGridView и обновить таблицу данных SQL

Когда я обновляю один раз, у меня есть правильный вывод.

http://tinypic.com/view.php?pic=1632bs&s=5

При нажатии на кнопку обновления еще раз, он обновляет только первую строку, как показано в следующей картинке:

http://tinypic.com/r/350p6hd/5

private void txtid_TextChanged(object sender, EventArgs e) 
    { 
     SqlConnection csq = new SqlConnection("workstation id=;initial catalog=iridadb; integrated security=SSPI"); 

     SqlDataAdapter dsaq = new SqlDataAdapter(); 
     DataSet dsq = new DataSet(); 

     dsaq.SelectCommand = new SqlCommand("Select * from Table_1 where left(id, " + txtid.Text.Length + ") = '" + txtid.Text + "' order by ItemID ASC", csq); 
     dsq.Clear(); 

     dsaq.Fill(dsq); 

     dataGridView1.DataSource = dsq.Tables[0]; 
     dataGridView1.AllowUserToAddRows = false; 

     bindDataGridView2(); 
    } 

    public void bindDataGridView2() 
    { 

     SqlConnection csq = new SqlConnection("workstation id=;initial catalog=iridadb; integrated security=SSPI"); 

     SqlDataAdapter dsaq = new SqlDataAdapter(); 
     DataSet dsq = new DataSet(); 

     dsaq.SelectCommand = new SqlCommand("Select * from Table_2 ", csq); 
     dsq.Clear(); 

     dsaq.Fill(dsq); 

     dataGridView2.DataSource = dsq.Tables[0]; 
     dataGridView2.AllowUserToAddRows = false; 

    } 

    private void btnUpdate_Click(object sender, EventArgs e) 
    { 
     for (int i = 0; i <= dataGridView1.Rows.Count - 1; i++) 
     { 
      if (!dataGridView1.Rows[i].IsNewRow) 
      { 


       SqlConnection connan = new SqlConnection("DATA SOURCE=;initial catalog=iridadb; integrated security=SSPI"); 
       SqlDataAdapter danan = new SqlDataAdapter(); 
       danan.UpdateCommand = new SqlCommand("UPDATE Table_2 SET Stock = @Stock WHERE itemID = @itemID", connan); 
       danan.UpdateCommand.Parameters.Add("@itemID", SqlDbType.VarChar).Value = Convert.ToString(dataGridView1.Rows[i].Cells[1].Value).ToString(); 

       danan.UpdateCommand.Parameters.Add("@Stock", SqlDbType.VarChar).Value = (Double.Parse(dataGridView1.Rows[i].Cells[2].Value.ToString()) + Double.Parse(dataGridView2.Rows[i].Cells[1].Value.ToString())).ToString(); 



       connan.Open(); 
       danan.UpdateCommand.ExecuteNonQuery(); 
       connan.Close(); 

       bindDataGridView2(); 


      } 
     } 
    } 

ответ

0

Проверьте свои расчеты суммы:

(Double.Parse(dataGridView1.Rows[i].Cells[2].Value.ToString()) + Double.Parse(dataGridView2.Rows[i].Cells[1].Value.ToString())).ToString(); 

Вы рассчитываете сумма строк с одинаковым rowindex, но обновление базы данных по Itemid

когда в перекручивание индекса i = 2 затем подсчитывать Шток (где Itemid = 03) + Фото (где Itemid = 02) -> а со ст 02 не обновляя его всегда оставаться на 100. Вот почему пункт 03 акций будет всегда, как 100 + 1

поскольку общий запас в базе данных уже, а затем использовать запрос, как этот

UPDATE Table_2 SET 
Stock = CAST(
     CAST(Stock AS DECIMAL(19,4)) + CAST(@Stock AS DECIMAL(19,4)) 
     AS VARCHAR(MAX)) 
WHERE itemID = @itemID" 

и принимать значения только из datagridview1

danan.UpdateCommand.Parameters.Add("@itemID", SqlDbType.VarChar).Value = Convert.ToString(dataGridView1.Rows[i].Cells[1].Value).ToString(); 

// 
danan.UpdateCommand.Parameters.Add("@Stock", SqlDbType.VarChar).Value = (Double.Parse(dataGridView1.Rows[i].Cells[2].Value.ToString()) 

P.S. Извините, но на самом деле кажется странным, когда вы сохранили значения Double/Decimal как VARCHAR ...?

+0

i m ошибка при вычислении суммы. мой столбец данных - varchar (max). danan.UpdateCommand = новый SqlCommand ("UPDATE Table_2 SET Stock = Stock + @Stock WHERE itemID = @itemID", connan); danan.UpdateCommand.Parameters.Add ("@ itemID", SqlDbType.VarChar) .Value = Convert.ToString (dataGridView1.Rows [i] .Cells [1] .Value) .ToString(); danan.UpdateCommand.Parameters.Add ("@ Stock", SqlDbType.VarChar) .Value = (Double.Parse (dataGridView1.Rows [i] .Cells [2] .Value.ToString())); – paminos

+0

@paminos, я обновил свой ответ с преобразованием 'VARCHAR' в' DECIMAL' и после вычисления обратно в 'VARCHAR' – Fabio

+0

Решенный. Grazie Mille Fabio :-) – paminos

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