我的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所做的更改,即更新一个单元格值,然后保存在数据库中。