为了回答我的问题,我需要先做一点解释,所以请耐心等待。
此应用程序有 2 种形式。在主窗体中,我有一个DataGridView
. 它正在显示来自数据库表的数据。它DataSource
被设置为一个DataTable
对象。这是主窗体的代码。
using System;
using System.Data;
using DataAccess;
namespace WindowsFormsApplication3
{
public partial class Form1 : Form
{
private SqlDataAccess _dataAccess = new SqlDataAccess(); //SqlDataAccess is a class written to handle database related operations
private DataTable _dataTable = null;
private void Form1_Load(object sender, EventArgs e)
{
string query = @"SELECT * FROM fEmployee";
_dataTable = _dataAccess.GetDataTable(query, null);
dgvEmployees.DataSource = _dataTable;
}
private void dataGridView1_RowHeaderMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
{
//Convert the current selected row in the DataGridView to a DataRow
DataRowView currentDataRowView = (DataRowView)dgvEmployees.CurrentRow.DataBoundItem;
DataRow dataRow = currentDataRowView.Row;
Form2 f = new Form2(dataRow);
f.ShowDialog();
}
}
}
单击 的行标题时DataGridView
,将出现一个子表单。此子表单用作修改所选行的字段值的地方。包含所选行字段的DataRow
对象被发送到子表单的重载构造函数。并且在该表单的 Load 事件中,其中包含的数据DataRow
将显示在子表单的多个文本框中。
子表单的代码。
using System;
using System.Data;
namespace WindowsFormsApplication3
{
public partial class Form2 : Form
{
private DataRow _employeeDetails = null;
private bool _isDirty = false;
public Form2(DataRow empDetails)
{
InitializeComponent();
_employeeDetails = empDetails;
}
private void btnCancel_Click(object sender, EventArgs e)
{
this.Close();
}
private void Form2_Load(object sender, EventArgs e)
{
txtFName.Text = _employeeDetails["FirstName"].ToString();
txtLName.Text = _employeeDetails["LastName"].ToString();
txtAddress.Text = _employeeDetails["Address"].ToString();
txtCity.Text = _employeeDetails["City"].ToString();
txtPostalCode.Text = _employeeDetails["PostalCode"].ToString();
txtCountry.Text = _employeeDetails["Country"].ToString();
dtpDOB.Value = Convert.ToDateTime(_employeeDetails["DOB"]);
txtPhone.Text = _employeeDetails["Phone"].ToString();
txtEmail.Text = _employeeDetails["Email"].ToString();
dtpDOJ.Value = Convert.ToDateTime(_employeeDetails["DOJ"]);
txtBasicSalary.Text = _employeeDetails["BasicSalary"].ToString();
}
private void btnUpdate_Click(object sender, EventArgs e)
{
}
}
}
在子表单中,用户可以通过文本框更改值。
现在我的问题是:如何在主窗体的 DataGridView 中反映对子窗体中特定行所做的更改?
示例 - 我单击一个行标题,它打开子表单并加载详细信息。我更改名字。当我关闭子表单时,修改后的值应该在 main 中更新DataGridview
。
任何人都可以就如何做到这一点提出一些建议吗?
我尝试将 传递DataRow
给子表单作为参考,但这没有用。