使用Button更改datagridview单元格中的值,然后在SQL数据库中保存更改

时间:2014-03-31 15:26:09

标签: c# visual-studio datagridview

我的Windows窗体上有一个dataGridVew1,我使用在我的情况下命名的SQL Adapter" sda"从SQL填充。 你可以看到我如何在下面更新我的网格(也许我做错了):

    SqlConnection con = new SqlConnection("connection string"); //defining connection
    con.Open(); 
    string sql_command = "Select * from Test_Table";
    SqlCommand command = new SqlCommand(sql_command, con); // defining the command
    DataSet set = new DataSet("SQL_table");
    SqlDataAdaptersda = new SqlDataAdapter(command); //defining the adapter and make it accept changes
        sda.AcceptChangesDuringFill = true; 
        sda.AcceptChangesDuringUpdate = true;
        set.Clear(); //just to make sure my adapter is empty
    cmdBuilder = new SqlCommandBuilder(sda); //creating the command builder so I can save the changes
        sda.Fill(set, "SQL_table");  // fill the dataset
        dataGridView1.DataSource = set; 
        dataGridView1.DataMember = "SQL_table"; //fill datagrid
        dataGridView1.CellValueChanged -= dataGridView1_CellValueChanged;
        dataGridView1.CellValueChanged += dataGridView1_CellValueChanged; //look for cell value changed (I am using this in other scope)

当我手动将值更改为网格的任何单元格时,我使用按钮将更改保存到数据库:

    private void button2_Click(object sender, EventArgs e)
    {
        sda.Update(set.Tables["SQL_table"]);
    }

完美无缺。 我添加了第二个按钮来更改所选行的数据网格中的单元格值,但是我无法保存这些更改。

     private void button3_Click(object sender, EventArgs e)
    {


        if (dataGridView1.SelectedRows.Count > 0) //I am checking to see if any row is selected
        {
            row_index = this.dataGridView1.SelectedRows[0].Index; //to get the selected row index

            this.dataGridView1.Rows[row_index].Cells[2].Value = "change"; //I am changing the cell text on column 2 on the selected row
            dataGridView1.EndEdit(); //added this to try an make it work

                sda.Update(set.Tables["SQL_table"]); //trying to update the database

        }
        else
            MessageBox.Show("Please first select the row with the quote that is awaiting feedback."); // in case no row is selected

    }

这不会将数据保存到数据库中。我之后也尝试按下另一个保存按钮但没有结果,即使值"已更改"也没有数据保存在数据库中。在网格中可见。

我知道我不能将save命令放在CellValueChanged事件中,因为它不会进行最后一次更改。 如何在上面提到的单独按钮中使其工作?我需要的是: 1.按按钮 - 更改单元格的值 2.提交数据库中的更改。

谢谢。 Danut

编辑1:关于博卢的请求

当其他单元格发生更改时,我正在使用CellValueChanged事件更新数据网格中的列:

    private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
    {
         if (e.ColumnIndex > -1 && e.ColumnIndex < 13)
           {
               DateTime datetime_send = DateTime.Now;
               dataGridView1.Rows[e.RowIndex].Cells[13].Value = datetime_send;
           }
    }

我尝试将更新放在事件中,但它没有保存,因此我使用单独的按钮来调用数据库保存。 (但这是另一个故事)。现在我只想保存我对button3所做的更改,即更新一个单元格值,然后保存在数据库中。

0 个答案:

没有答案