2013-03-11 47 views
7

我在datagridview中顯示數據庫表。我可以將記錄從datagridview正確保存到sql中的數據庫。將編輯的數據保存在行中

現在,我想修改和更改一些記錄並將這些更改保存在數據庫中。我怎樣才能做到這一點?我使用的綁定datasource附加到數據集datatable

private void Form1_Load(object sender, EventArgs e) 
{ 
    this.cPDM0020TableAdapter.Fill(this.cpdm_dataset.CPDM0020); 
} 

private void btnSave_Click(object sender, EventArgs e) 
{ 
    string code = dataGridView1[0, dataGridView1.CurrentCell.RowIndex].Value.ToString().ToUpper(); 
    string currency_Name = dataGridView1[1, dataGridView1.CurrentCell.RowIndex].Value.ToString().ToUpper(); 
    string boolBase = dataGridView1[2, dataGridView1.CurrentCell.RowIndex].Value.ToString(); 
    string local_per_Base = dataGridView1[3, dataGridView1.CurrentCell.RowIndex].Value.ToString(); 
    string base_per_Local = dataGridView1[4, dataGridView1.CurrentCell.RowIndex].Value.ToString(); 
    string insert_sql = "INSERT INTO centraldb.dbo.CPDM0020(Code,Currency_Name,Base,Local_per_Base,Base_per_Local)VAL‌​UES('" + 
     code + "','" + 
     currency_Name + "','" + 
     boolBase + "','" + 
     local_per_Base + "','" + 
     base_per_Local + "')"; 

    if (this.ExecuteSql(insert_sql)) 
    { 
     MessageBox.Show("Record Inserted Successfully."); 
    } 
    else 
    { 
     MessageBox.Show("Insert Failed"); 
    } 
} 

public bool ExecuteSql(string command) 
{ 

    SqlCommand sqlCommand = new SqlCommand(command, connection); 
    connection.Open(); 
    sqlCommand.ExecuteNonQuery(); 
    this.cPDM0020TableAdapter.Fill(this.cpdm_dataset.CPDM0020); 
    dataGridView1.DataSource = cpdm_dataset.CPDM0020; 
    sqlCommand.Dispose(); 
    connection.Close(); 
    return true; 
} 

我可以保存新的條目很容易地在數據庫和datagridview,但保存按鈕編輯後,我不能編輯已經存在records..On點擊,它再次顯示了先前的值。請幫忙。

回答

0

嘗試使用下面的代碼>

try 
{ 
    var row = gvTransactions.CurrentRow; 
    int ID= int.parse(row.Cells[0].Value.ToString()); 
    string abc=row.Cells[0].Value.ToString(); 
} 
catch(exception ex) 
{ 
} 

獲取這樣的值。

注意:不要寫任何東西在catch塊

,然後火插入/更新查詢根據您的需要。

+0

你不能聲明在try塊變量,一旦試已經結束,他們將丟失。 – Flater 2013-03-11 13:17:22

+1

另外,神奇寶貝異常處理通常是一個壞主意。 – Flater 2013-03-11 13:18:41

+0

這是我的代碼:私人無效Form1_Load的(對象發件人,EventArgs的) { this.cPDM0020TableAdapter.Fill(this.cpdm_dataset.CPDM0020);} – user2156513 2013-03-12 04:26:40

2

您的數據庫不受您的應用程序控制;當數據發生變化時,它不會將某個事件發送回您的應用程序。您必須主動重新查詢數據庫以進行更改。

更典型的DataGridView方法是首先將更改應用到本地數據副本,然後使用DataAdapter將更改推回到數據庫。這樣可以避免在更改完成後刷新整個本地數據集。請參閱使用DataAdapter更新數據源(ADO.NET)。

的基本步驟是:

  1. 連接到數據源,使用DataAdapter.Fill方法()來填補你的數據表
  2. 定義一個UpdateCommand或將InsertCommand定義如何在本地數據表,數據將被推到數據庫
  3. 將一行添加到本地數據表中
  4. 調用DataAdapter.Update()將更新推送到數據庫。
1

只要你有檢查記錄在表中存在先用選擇命令

「SELECT * FROM centraldb.dbo.CPDM0020其代碼=「」 +代碼+「」」;如果記錄存在執行更新查詢

public bool IsExistRecord(string Query) 
    { 
     try 
     { 
      DataTable DT = new DataTable(); 
      SqlCommand CMD = new SqlCommand(Query, Connection); 
      SqlDataAdapter DA = new SqlDataAdapter(CMD); 
      DA.Fill(DT); 

      if (DT.Rows.Count > 0) 
       return true; 
      else 
       return false; 

     } 
     catch (Exception ex) 
     { 
      return false; 
     } 
    } 

如果不存在執行插入查詢:

您可以使用此功能。

0

進行更新按鈕:

private void btnUpdate_Click(object sender, EventArgs e) { 
    string code = dataGridView1[0, dataGridView1.CurrentCell.RowIndex].Value.ToString().ToUpper(); 
    string currency_Name = dataGridView1[1, dataGridView1.CurrentCell.RowIndex].Value.ToString().ToUpper(); 
    string boolBase = dataGridView1[2, dataGridView1.CurrentCell.RowIndex].Value.ToString(); 
    string local_per_Base = dataGridView1[3, dataGridView1.CurrentCell.RowIndex].Value.ToString(); 
    string base_per_Local = dataGridView1[4, dataGridView1.CurrentCell.RowIndex].Value.ToString(); 
    string select_qry = "Select * from centraldb.dbo.CPDM0020 Where Code = '" + Code + "'"; 
    if(IsExistRecord(select_qry)) 
    { 
    string update_qry = Update centraldb.dbo.CPDM0020 set Code,Currency_Name='" + currency_Name + "',Base='" + boolBase + "',Local_per_Base,Base_per_Local='" + base_per_Local + "' where code='" + code +"'"; 
    if (this.ExecuteSql(update_qry)) { 
     MessageBox.Show("Record Updated Successfully."); 
    } else { 

     MessageBox.Show("Update Failed"); 
    } 
    } 
} 
    //code taken from Mohammad abumazen 
public bool IsExistRecord(string Query) 
{ 
     DataTable DT = new DataTable(); 
     SqlCommand CMD = new SqlCommand(Query, Connection); 
     SqlDataAdapter DA = new SqlDataAdapter(CMD); 
     DA.Fill(DT); 

     if (DT.Rows.Count > 0) 
      return true; 
     else 
      return false; 

    } 
0

由於您使用的是dataSet,你可以在你的tableApdater創建一個命令。 這裏是關於Creating a Data Access Layer的文章,因爲您在winforms中,您可以將該文章應用到您的項目中。

我希望這張圖片能給你提示save,update,edit,delete

enter image description here

相關問題