如何在DataGridView中替换/更新DataRow

时间:2012-08-25 15:36:57

标签: c# sql-server datagridview ado.net datarow

我正在尝试更新SQL表中的单个记录。因此,我有DataGridView该表的视图,当在表中选择某行并单击“更新”按钮时,将打开新的更新Form

主表单将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();
}

当Update Form完成更新时,它会调用action并将行返回到Main Form,如下所示。

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?
}

1 个答案:

答案 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();
                }
            }
        }
    }