从子窗体刷新 DataGridView
Posted
技术标签:
【中文标题】从子窗体刷新 DataGridView【英文标题】:Refresh DataGridView from child Form 【发布时间】:2011-12-14 04:30:57 【问题描述】:让我快速描述一下场景: 1) 在 Form1 中,我有一个名为 dgv_Employee 的 dataGridView 和一个 searchButton。 2)在 Form1 的 pageload 事件中有一个填充 dataGridView 的代码。在这里,我使用 linq to sql 来填充数据。(例如 dgv_Employee.dataSource = Dbmlobject.Employee;) 3) 每当按下 searchButton 时,就会打开一个新的 Form Form2,用户通过提供适当的输入来搜索特定的员工。 4)点击搜索按钮时,我希望将搜索结果显示在dataGridView中并关闭Form2。我已经成功关闭了form2。但是无法从form2刷新form1中的datagridview。
请帮助我,因为我正在尝试 3 天。
【问题讨论】:
将您的问题以适当的可读格式提出。就像在你的问题中使用 标签来换行等等。 【参考方案1】:您需要使用 Event 和 delegate 来获得您想要的输出。 让我举个例子。
假设有两个表格Form1和Form2。
Form1 包含一个 DataGridView 和 搜索按钮。 Form2 包含一个名为 ok 的 文本框 和 按钮。 假设 DataGridView 填充了员工姓名,它需要按姓名搜索。 Form2 在按下搜索按钮时打开,然后在 form2 上填写员工姓名后,当按下 ok 按钮时 Form2 关闭,并且在填写员工姓名时过滤数据。 因此,要获得上述结果,您可以执行以下操作:Form1 代码:
private void btnSearch1_Click(object sender, EventArgs e)
Form2 frm2 = new Form2();
frm2.Show();
上面的代码做什么不用解释了。 现在,Form2 的代码:
public delegate void OnSearch(string employeeName);
public partial class Form2 : Form
public event OnSearch OnSearchClick;
protected virtual void FireEvent(string employeeName)
if (OnSearchClick != null)
OnSearchClick(employeeName);
public Form2()
InitializeComponent();
private void btnSearch_Click(object sender, EventArgs e)
string employeeName = txtEmp.Text;
FireEvent(employeeName);
this.Close();
我告诉过你需要使用事件和委托,这里都是form2。 在 Form2 中有一个名为 OnSearch 的 delegate,其中包含字符串参数。还有一个代表OnSearch的事件OnSearchClick。 在这里,代表在课堂上交付。 接下来,创建 FireEvent 函数,该函数在调用此方法时触发 事件 OnSearchClick。FireEvent 在 btnSearch 按钮单击时调用。这里employeeName在方法中传递,您可以在方法中传递更多参数或对象,您可以在Form1上获取它,您可以应用过滤器。
现在是时候编辑 Form1 的代码了:
private void btnSearch1_Click(object sender, EventArgs e)
Form2 frm2 = new Form2();
frm2.OnSearchClick += new OnSearch(frm2_OnSearchClick);
frm2.Show();
void frm2_OnSearchClick(string employeeName)
MessageBox.Show(employeeName);
如上所示编辑 From1 的代码,现在当您编写 frm2. 时,智能感知会为您提供名为 OnSearchClick 的事件,然后选择该事件,然后在一个空格之后键入 += ,然后按 Tab。如您在上面的代码所示,它将生成 frm2_OnSearchClick 事件。 将 Form2 中的所有参数传递给 Form1(我只传递了一个)并编写逻辑以在 frm2_OnSearchClick 事件中绑定 DataGridView。 现在,每当您点击 搜索按钮(位于 Form2) 时,它都会触发 frm2_OnSearchClick 事件(位于 Form1) 并且 DataGridView 将刷新。
【讨论】:
【参考方案2】: Form2 form2 = new Form2();
//add handler to catch when child form is closed
form2.FormClosed += new FormClosedEventHandler(form2_FormClosed);
form2.ShowDialog();
private void form2_FormClosed(object sender, FormClosedEventArgs e)
//when child form is closed, this code is executed
// Bind the Grid view
PopulateControls();
【讨论】:
【参考方案3】:在方法上将您的绑定添加到网格,以便在您的事件的任何地方轻松调用我。
private void BindTogrid()
//call again you binding
dgv_Employee.dataSource = Dbmlobject.Employee;
然后根据你的
searchButton click()
Form2 form2 = new Form2();
form2.ShowDialog(); //Show Form2
BindTogrid(); //Execute if Dialog has been closed;
希望对您有所帮助。
问候
【讨论】:
【参考方案4】:每当需要刷新网格时,只需重新分配数据源。
【讨论】:
以上是关于从子窗体刷新 DataGridView的主要内容,如果未能解决你的问题,请参考以下文章
DevExpress TabbedView : 从子窗体创建子窗体