2012-08-25 82 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