0

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

主窗体将DataRowrow 参数传递给 new Form,当更新结束时,将 row 返回到主窗体。主窗体中的代码示例大约是这样的:

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 并将 row 返回到 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?
}
4

1 回答 1

0

你必须知道哪一行。dgv(和数据行)中是否已有任何 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();
                }
            }
        }
    }
于 2012-08-25T15:49:33.577 回答