我正在尝试更新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?
}
答案 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();
}
}
}
}