【问题标题】:Changes from datagridview not being saved in databasedatagridview 的更改未保存在数据库中
【发布时间】:2016-12-04 13:11:07
【问题描述】:

我有这个表单,当我给它一些 ID 并单击突出显示的按钮时,会在从数据库中获取的 datagridview 中显示一些信息。 First Form

按钮的代码在这里:

 private void kerkoButton_Click(object sender, EventArgs e)
    {
        try
        {               
            Konektimi();
            string query = "SELECT * FROM Vizita WHERE PacientiId=@pacientiId";

                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);
        }

假设我们从数据库中得到一些东西,我们得到这个: Second Form,with the results

这是一个新的表单,点击kerkoButton后会打开。

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

【问题讨论】:

    标签: c# sql-server datagridview


    【解决方案1】:

    看看“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);
    

    或者,如果您想一次更新所有已编辑的行,您必须创建一个标志并将其设置为true,每当您使用PropertyChanged 事件更改属性时。

    点击“保存”时,您会遍历所有行并将已编辑的行添加到rowsToUpdate。

    【讨论】:

    • 如果您正确使用数据绑定,DataTable 将跟踪它自己的更改,您只需在适配器上调用 Update。如果您在网格行上进行迭代,那么您做错了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-23
    • 2012-07-07
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    • 2017-12-11
    • 1970-01-01
    相关资源
    最近更新 更多