2012-08-25 132 views
0

我正在嘗試更新SQL表中的單個記錄。所以,我有DataGridView視圖的表,當在表中選擇某一行並點擊更新按鈕時,打開新的更新Form如何替換/更新DataGridView中的DataRow

主窗體將DataRow行參數傳遞給新的Form,當更新結束時,行返回到主窗體。代碼示例是關於像這樣的主要形式:

private void btnUpdateUser_Click(object sender, EventArgs e) 
{ 
    //Some code to extract DataRow 
    FormUpdateUsers updateUser = new FormUpdateUsers(row, new Action<DataRow>(onUserUpdated)); 
    updateUser.Show(); 
} 

當更新表單完成更新,它調用的操作並返回行主窗體,如下圖所示。

public partial class FormUpdateUsers : Form 
{ 

private DataRow row; 
private Action<DataRow> action; 

public FormUpdateUsers(DataRow row, Action<DataRow> action) 
    { 
     InitializeComponent(); 

     this.row = row; 
     this.action = action; 
    } 

    private void btnConfirm_Click(object sender, EventArgs e) 
    { 
    //Some code for updatin a database 
    action.Invoke(row); 
    } 
} 

的問題是,如何將返回的行曬到DataGridView和替換過時的呢?有什麼建議麼?

private void onUserUpdated(DataRow row) 
{ 
// Update DataGridView? 
} 
+0

兩個問題:你如何讓你傳遞給第二個表格的行,會直接對你的原始數據工作的更新?如果您只是將數據行傳遞給第二個表單,那麼更新它就不需要將其傳回 - 數據表將自動更新,因爲您正在處理同一個對象。 –

回答

0

你必須知道哪一行。 dgv(和datarow)中是否有任何id列? 如果是這樣,那麼你可以做:

private void onUserUpdated(DataRow row) 
    { 
     int idColumn = int.Parse(row["IdColumn"].ToString()); 
     foreach (DataGridViewRow DGVrow in dataGridView1.Rows) 
     { 
      if (idColumn == int.Parse(DGVrow.Cells["IdColumn"].Value.ToString())) 
      { 
       for (int i = 0; i < row.ItemArray.Length; i++) 
       { 
        dataGridView1[i, DGVrow.Index].Value = row.ItemArray[i].ToString(); 
       } 
      } 
     } 
    } 
+0

這個作品,謝謝!但是,有一些錯誤。在聲明一個值時,它沒有使用toString()方法。最後,NULL行存在一個問題,但我解決了這個問題,現在它完美地工作。再次感謝! – miller