datagridview中的更改没有被保存在数据库中

datagridview中的更改没有被保存在数据库中

问题描述:

我有这种形式,当我给它一些ID并单击突出显示的按钮时,向我显示从数据库中获取的datagridview中的一些信息。 First Formdatagridview中的更改没有被保存在数据库中

按钮的代码是在这里:

private void kerkoButton_Click(object sender, EventArgs e) 
    { 
     try 
     {    
      Konektimi(); 
      string query = "SELECT * FROM Vizita WHERE [email protected]"; 

       using (SqlCommand command = new SqlCommand(query, conn)) 
       { 

        command.Parameters.AddWithValue("@pacientiId",pacientiTextBox.Text);            
        conn.Open(); 
        using (SqlDataReader reader = command.ExecuteReader()) 
        { 
         if (reader.HasRows) 
         { 
          DataTable dt = new DataTable(); 
          dt.Load(reader); 
          forma.vizitaDataGridView.DataSource = dt; 
          forma.ShowDialog(); 
         } 
         else 
         { 
          MessageBox.Show("Nuk ka të dhëna për këtë pacient"); 
         } 
        } 
        conn.Close(); 
       } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 

Suposing我们从数据库中得到的东西,我们得到这样的: Second Form,with the results

这是将点击后打开的新形式kerkoButton。

现在,问题是这样的:当我编辑一行(或某些行)时,如果单击保存,更改将不会保存在数据库中。 我该怎么办? 我可以在这个数据网格中做一个SaveButton吗?如果是的话,怎么样?

看看“how to update row in DataGridView?

您可以使用您的DataGridView的财产CurrentRow像这样访问编辑行:

DataRowView dataRowView = yourDataGridView.CurrentRow.DataBoundItem as DataRowView; 
DataRow[] rowsToUpdate = new DataRow[] { dataRowView.Row }; 

SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM Vizita", con); 
SqlCommandBuilder builder = new SqlCommandBuilder(adapter); 
adapter.Update(rowsToUpdate); 

另外,如果你想在更新所有编辑的行一旦您使用PropertyChanged事件更改属性,您必须创建一个标志并将其设置为true

单击“保存”时,遍历所有行并将编辑的行添加到rowsToUpdate

+0

如果正确使用数据绑定,则DataTable将跟踪其自身的更改,并且您只需在适配器上调用Update即可。如果你正在迭代网格行,你做错了。 – Crowcoder