无法将 Gridview 的更改更新到数据库
Posted
技术标签:
【中文标题】无法将 Gridview 的更改更新到数据库【英文标题】:Unable to update changes of Gridview to database 【发布时间】:2013-01-19 07:19:20 【问题描述】:编辑网格视图后无法更新对数据库的更改。没有抛出错误,但数据库中的表中的更改没有更新。我在这里使用 Sql 服务器,我有两个 Winform,分别称为 Form1 和 Form 2。一个按钮(Form1 中的 btnSearchAll)打开 Form2 中的 gridview 并加载所有数据。当我尝试在 gridview(在 Form2 中)编辑数据并尝试更新时,它不会更新更改。请帮忙
下面是我的表格 1:
namespace Tailor_app
public partial class Form1 : Form
DataSet ds = new DataSet();
SqlConnection con = new SqlConnection("server=(local);Database=MSNETDB;Integrated Security=true;");
SqlDataAdapter da;
DataTable dt;
public Form1()
InitializeComponent();
private void Form1_Load(object sender, EventArgs e)
//SqlConnection con = new SqlConnection("server=(local);Database=MSNETDB;Integrated Security=true;");
txtFirstName.Focus();
da = new SqlDataAdapter("select * from Measurement", con);
da.Fill(ds, "Measurement");
dt = ds.Tables["Measurement"];
SqlCommandBuilder cb = new SqlCommandBuilder(da);
cb.ConflictOption = ConflictOption.CompareAllSearchableValues;
private void btnSave_Click(object sender, EventArgs e)
DataRow dr = dt.NewRow();
dr["CellNumber"] = txtCellNo.Text.Trim();
dr["FirstName"] = txtFirstName.Text;
dr["LastName"] = txtLastName.Text;
dr["Shirt"] = txtShirt.Text;
dr["Pant"] = txtPant.Text;
dr["DueDate"] = txtDueDate.Text;
dr["Date"] = txtDate.Text;
if (dr["CellNumber"] == "")
MessageBox.Show("Please enter Cell Number");
else if (dr["CellNumber"] != "")
dt.Rows.Add(dr);
MessageBox.Show("Success");
try
da.Update(ds, "Measurement");
catch (DBConcurrencyException ex)
MessageBox.Show(ex.Message);
dt.Clear();
da.Fill(ds, "Measurement");
private void btnSearchAllCustomers_Click(object sender, EventArgs e)
this.Hide();
frmDgv_SearchResult frm2 = new frmDgv_SearchResult();
frm2.Show();
using (da = new SqlDataAdapter())
try
da.SelectCommand = new SqlCommand("Select * From Measurement", con);
ds.Clear();
da.Fill(ds,"Measurement");
dt = ds.Tables["Measurement"];
frm2.dgvSearchResults.DataSource = dt;
catch (Exception ex)
MessageBox.Show(ex.Message.ToString());
下面是我的表格 2:
namespace Tailor_app
public partial class frmDgv_SearchResult : Form
DataSet ds = new DataSet();
SqlConnection con = new SqlConnection("server=(local);Database=MSNETDB;Integrated Security=true;");
SqlDataAdapter da;
DataTable dt;
public frmDgv_SearchResult()
InitializeComponent();
private void dgvSearchResults_CellContentClick(object sender, DataGridViewCellEventArgs e)
private void frmDgv_SearchResult_Load(object sender, EventArgs e)
da = new SqlDataAdapter("select * from Measurement", con);
da.Fill(ds, "Measurement");
dt = ds.Tables["Measurement"];
SqlCommandBuilder cb = new SqlCommandBuilder(da);
cb.ConflictOption = ConflictOption.CompareAllSearchableValues;
private void btnUpdate_Click(object sender, EventArgs e)
try
da.Update(ds, "Measurement");
catch (DBConcurrencyException ex)
MessageBox.Show(ex.Message);
dt.Clear();
da.Fill(ds, "Measurement");
finally
MessageBox.Show("success");
【问题讨论】:
【参考方案1】:您应该在插入、更新或删除之后dt.AcceptChanges();
。 AcceptChanges
提交自上次调用 AcceptChanges
以来对您的数据表所做的所有更改
【讨论】:
dt.AcceptChanges();没有影响,我不知道为什么它不起作用。 sqlcommandbuilder 处理所有的插入、更新和删除。所以我想我不声明sqlparameters.add。我所要做的就是 dataAdapter.update("TableName");它应该可以工作,但不知道为什么它不工作。任何人请帮助我。【参考方案2】:尝试为您的数据适配器请求更新命令:-
private void frmDgv_SearchResult_Load(object sender, EventArgs e)
da = new SqlDataAdapter("select * from Measurement", con);
da.Fill(ds, "Measurement");
dt = ds.Tables["Measurement"];
SqlCommandBuilder cb = new SqlCommandBuilder(da);
cb.GetInsertCommand();
cb.GetUpdateCommand();
cb.GetDeleteCommand();
cb.ConflictOption = ConflictOption.CompareAllSearchableValues;
【讨论】:
【参考方案3】:我的看起来更像这样:
da.Fill(dt)
Dim cb As SqlCommandBuilder = New SqlCommandBuilder(da)
da.MissingSchemaAction = MissingSchemaAction.AddWithKey ' includes default field value settings
da.InsertCommand = cb.GetInsertCommand ' instantiate for transaction
da.UpdateCommand = cb.GetUpdateCommand
【讨论】:
什么都试过了,还是不行。请帮助我从两三天开始问每个人,但仍然没有任何解决方案。在 Goolge 上寻找类似的问题,但找不到任何问题。 是否设置了数据适配器的插入和更新命令属性?此外,您需要在服务器端使用唯一键,以便它可以识别要更新的行。 我正在使用命令生成器进行插入和更新。我在数据库中将 ID 作为自动增量,但我没有为 ID 列提供任何代码或功能。 如果打印 da.insertcommand 的值,它会返回什么?以上是关于无法将 Gridview 的更改更新到数据库的主要内容,如果未能解决你的问题,请参考以下文章
如何在不将数据保存到数据库的情况下更新 Gridview 行