2013-08-02 110 views
0

首次将datagrid保存到数据库感谢您的任何帮助。
我填写的数据网格是这样的:将datagridView保存到sql数据库中

private void FillGrid1() 
    { 
     frmEditovat frm2 = new frmEditovat(this); 
     DataTable DT = null; 
     DataRow newRow; 
     int pTypNastaveniaID = 0; 
     string pNazov = "", pHodnota = ""; 

     DataConnector_My dataConnector = new DataConnector_My(mDataRoot.ConnectCentrum.ConnectionString); 


     try 
     { 
      dataConnector.Init(mDataRoot.ConnectCentrum); 

      DT = dataConnector.Get_Nastavenia(); 

      /* Odstranim zdroj pre Grid. Musi byt koli triedeniu gridu. */ 
      dataGridView1.DataSource = null; 
      /* Smazanie Tabulky. */ 
      mDTable1.Clear(); 

      for (int row = 0; row < DT.Rows.Count; row++) 
      { 
       pTypNastaveniaID = 0; pNazov = ""; pHodnota = ""; 

       if (DT.Rows[row]["TypNastaveniaID"] != DBNull.Value) pTypNastaveniaID = Convert.ToInt32(DT.Rows[row]["TypNastaveniaID"]); 
       if (DT.Rows[row]["Nazov"] != DBNull.Value) pNazov = DT.Rows[row]["Nazov"].ToString(); 
       if (DT.Rows[row]["Hodnota"] != DBNull.Value) pHodnota = DT.Rows[row]["Hodnota"].ToString(); 

       newRow = mDTable1.NewRow(); 

       newRow["TypNastaveniaID"] = pTypNastaveniaID; 
       newRow["Nazov"] = pNazov; 
       newRow["Hodnota"] = pHodnota; 


       mDTable1.Rows.Add(newRow); 
      } 


      /* Datovy zdroj zpet. */ 
      dataGridView1.DataSource = mDTable1; 

      Application.DoEvents(); 
     } 
     catch (SqlException e) 
     { 
      MessageBox.Show(this.GetType() + ".FillGrid: " + Environment.NewLine + e.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 
     finally 
     { 
      DT.Dispose(); 
     } 

    } 

我想点击操作后datagriView1保存到数据库中的按钮:

private void btnSave_Click_1(object sender, EventArgs e) 

或者一些示例有类似的代码会升值。

+0

只是为了确认 - 基本上你想要将数据表'mDTable1'保存到SQL Server数据库中,对吗?该数据库中是否存在与列“mDTable1”匹配的表? –

回答

3

既然你没有,如果你使用任何的TableAdapter我猜你只是坚持你的DataTable指定...

最简单的方法是首先找的更改,然后在它们之间迭代。根据其性质(NEW,UPDATE,DELETED)对数据库执行自己的查询。

var dataTable = ((DataTable)dataGridView1.DataSource).GetChanges(); 
if(dataTable != null && dataTable.Rows.Count > 0) 
{ 
    foreach (DataRow row in dataTable.Rows) 
     { 
      switch (row.RowState) 
      { 
       case DataRowState.Added: 
        // DO INSERT QUERY 
        break; 
       case DataRowState.Deleted: 
        // DO DELETE QUERY 
        break; 
       case DataRowState.Modified: 
        SqlCommand command = new SqlCommand("UPDATE YOURTABLE SET TypNastaveniaID = @typ, Nazov = @title, Hodnota = @amount"); 
        command.Parameters.Add(new SqlParameter("@typ", row["TypNastaveniaID"])); 
        command.Parameters.Add(new SqlParameter("@title", row["Nazov"])); 
        command.Parameters.Add(new SqlParameter("@amount", row["Hodnota"])); 
        command.ExecuteNonQuery(); 
        break; 
      } 
     } 
    ((DataTable)dataGridView1.DataSource).AcceptChanges(); 
} 

希望你明白了。请注意AcceptChanges,它需要在根表上调用。它会将更改设置为“完成”,因此下次单击时不会再次遍历相同的行。

+0

还不知道。在我的情况下,我会使用案例DataRowState.Modified:?因为我想要更新数据到新的 – John

+0

添加将是新的条目,这是不是在分贝 – zewa666

+0

我的条目是在分贝...我改变它们,并将它们保存到数据库 – John

相关问题