2013-02-04 36 views
0

编辑gridview后无法更新对数据库的更改。没有引发错误,但数据库中的表中没有更新更改。我在这里使用Sql服务器,并且我有两个名为Form1和Form 2的Winforms。一个按钮(Form1中的btnSearchAll)打开Form2中的gridview并加载所有数据。当我尝试在GridView中编辑数据(在Form2中)并尝试更新时,它不会更新这些更改。请帮助无法将Gridview的更改更新为数据库

下面是我的表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"); 
      } 
     } 

回答

0

尝试申请为自己的数据适配器更新命令你的数据表中所做的所有更改: -

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; 
    } 
+0

我按照你的说法试过,但仍然不能正常工作 – kittu

1

你应该dt.AcceptChanges();后插入,更新或删除。 AcceptChanges提交自上次AcceptChanges被称为

+0

dt.AcceptChanges();没有任何影响,我不知道为什么它不工作。 sqlcommandbuilder处理所有插入,更新和删除操作。所以我想我不要声明sqlparameters.add。我所要做的就是dataAdapter.update(“TableName”);它应该工作,但不知道为什么它不工作。任何人都请帮助我。 – kittu

0

矿山看起来更像是这样的:

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 
+0

尝试了每一件事,仍然无法正常工作。请帮助我一直在问两三天内的每一个人,但仍然没有任何解决办法。在Goolge上寻找类似的问题,但找不到任何。 – kittu

+0

是数据适配器集的插入和更新命令属性?另外,您需要服务器端的唯一密钥,以便识别要更新的行。 – Beth

+0

我正在使用命令生成器来插入和更新。我有ID作为数据库中的自动增量,但我没有给出ID列的任何代码或功能。 – kittu