2014-05-04 1 views
1

У меня есть два элемента управления в моей winform, то есть текстовые поля и данные datagridview .textboxes, введенные пользователем в одной таблице (покупка) и введенные данные datagridview сохраняются в другом table (addedetail). Моя проблема заключается в том, что значения текстовых полей сохраняются в таблице покупок, но значения datagridview не сохраняются в базе данных.как вставить значение datagridview в базу данных при нажатии кнопки в C#

here is my save button code: 

private void SAVE(object sender, EventArgs e) 
     { 

      try 
      { 
       con.Open(); 
       cmd = new SqlCommand("insert into Purchase(purchase_id,purchase_date,ref_no,total,total_wrds) values(@purchase_id,@purchase_date,@ref_no,@total,@total_wrds)", con); 

       cmd.Parameters.AddWithValue("@purchase_id", textid.Text); 
       cmd.Parameters.AddWithValue("@purchase_date", dateTimePicker1.Value); 
       cmd.Parameters.AddWithValue("@ref_no", textrno.Text); 
       cmd.Parameters.AddWithValue("@total", texttotal.Text); 
       cmd.Parameters.AddWithValue("@total_wrds", textinwrds.Text); 

       cmd.ExecuteNonQuery(); 
       foreach (DataGridViewRow row in datagrid.Rows) 
       { 

        if (!row.IsNewRow) 
        { 

          using(SqlCommand cmd11 = new SqlCommand("insert into Purchasedetail(product_id, product_name,qty,price,tax,discount,total)values(@product_id, @product_name,@qty,@price,@tax,@discount,@total)", con)) 

          { 
          cmd11.Parameters.AddWithValue("@product_id", row.Cells[0].Value); 
          cmd11.Parameters.AddWithValue("@product_name", row.Cells[1].Value); 
          cmd11.Parameters.AddWithValue("@qty", row.Cells[2].Value); 
          cmd11.Parameters.AddWithValue("@price", row.Cells[3].Value); 
          cmd11.Parameters.AddWithValue("@tax", row.Cells[4].Value); 
          cmd11.Parameters.AddWithValue("@discount", row.Cells[5].Value); 
          cmd11.Parameters.AddWithValue("@total", row.Cells[6].Value); 
          cmd11.ExecuteNonQuery(); 
          datagrid.Refresh(); 

          //row.ReadOnly = true; 
          //clm.ReadOnly = true; 
          MessageBox.Show("Added Sucessfully", "OUTPUT", MessageBoxButtons.OK, MessageBoxIcon.Information); 
          return; 
          } 

        } 



       } 



      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 

      finally 
      { 
       con.Close(); 
      } 

     } 
+0

Просто, чтобы быть ясным Вы хотите сохранить то, что видите в DataGrid, на стол? – Zgrkpnr

ответ

1

Я предполагаю, что вы хотите сохранить таблицу DataGrid в таблице в своей базе данных. С этим ответом я рекомендую вам работать с вашими данными в datagrid, а не с текстовыми полями, если это не очень необходимо. Сначала я объясняю код. Поскольку ваша временная таблица DG будет «добавлена», вам необходимо сначала очистить ее. Затем превратите ваш itemssource в таблицу и он будет готов к сохранению. Используйте адаптер для обновления таблицы.

try 
       { 
        SqlCommand ClearTableCommand = new SqlCommand("delete from " + CurrentTableName + ";", myconnection); 
        ClearTableCommand.ExecuteNonQuery(); 
        DataTable myDT; 
        DataView myview; 
        myview = (DataView)dataGrid1.ItemsSource; 
        myDT = myview.ToTable(CurrentTableName); 



       using (SqlDataAdapter Adapter1 = new SqlDataAdapter("select * from " + CurrentTableName + "", myconnection)) 
       { 

        Adapter1.UpdateCommand = new SqlCommandBuilder(Adapter1).GetUpdateCommand(true); 
        Adapter1.AcceptChangesDuringFill = false; 
        Adapter1.AcceptChangesDuringUpdate = true; 
        Adapter1.Update(myDT); 

       } 

      } 
      catch (Exception ex) 
      { 

       System.windows.MessageBox.Show(ex.Message); 
      } 
+0

У меня ограниченное datagridview, в пределах одной кнопки я хочу, чтобы оба текстовых поля и значения datagridview сохранялись в разных таблицах той же базы данных. Как я могу сделать сэр? – user3467599

+0

В вашем quesiton вы спросили, как сохранить datagrid на стол. Этот Кодекс рассказывает вам, как это сделать. Теперь вы не можете сохранить datagrid и текстовые поля с помощью одной кнопки. Gridview обновляет таблицу, где текстовые поля вставляют новые данные без обновления. Конечно, вы можете изменить наоборот, но это будет ненужная работа. Вы должны быть более ясными о том, что вы хотите. – Zgrkpnr

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