我想刷新用户控件上的datagridview,我用BringToFront()调用用户控件;在我的主窗体上执行操作,是否有任何事件,以便将User控件设置为最前面时可以刷新datagridview?像这样:
自定义控件:(具有datagridview:dgvCustomers)
namespace Healthcare
{
public partial class Overview : UserControl
{
public Overview()
{
InitializeComponent();
}
public void RefreshGrid()
{
using (DatabaseContext db = new DatabaseContext())
{
customersBindingSource.DataSource = db.Customers.ToList();
}
}
private void Overview_Load(object sender, EventArgs e)
{
RefreshGrid();
}
}
}
主要形式:
private void btnOverview_Click(object sender, EventArgs e)
{
ccOverview.BringToFront();
txtTitle.Text = "Healthcare - Overview";
RefreshGrid(); // Does not exist in the current context
}
答案 0 :(得分:2)
将这两种方法组合在一起似乎更容易。它简单明了,易于维护,您无需为了进行魔术而沉迷于其他事件
示例
public void RefreshMyAwesomeGrid()
{
using (DatabaseContext db = new DatabaseContext())
{
customersBindingSource.DataSource = db.Customers.ToList();
}
}
...
MyUserControl.BringToFront();
RefreshMyAwesomeGrid();
更新
问题是我无法从主表单访问数据网格 我的主要形式是我有一个按钮,一旦按下该按钮,它将带来 用户控件位于最前面,所以我必须将datagridview刷新 用户控件中的操作,但我想使用主表单来触发它 行动
假设您的DataGrid位于userControl中...不幸的是BringToFront
不能被覆盖。但是,您有两种选择。
最简单的方法是将公共方法放在您的UserControl
类RefreshMyAwesomeGrid
上。当您致电BringToFront
时致电RefreshMyAwesomeGrid
或者,或者只是让您的OwnBringToFrontPlusRefresh
<-看起来有些混乱
或者您可以使用解耦消息,具体取决于您是否使用任何框架
更新2
只需深入您的用户控件
private void btnOverview_Click(object sender, EventArgs e)
{
ccOverview.BringToFront();
txtTitle.Text = "Healthcare - Overview";
ccOverview.RefreshGrid(); // exists now
}
答案 1 :(得分:0)
class Form1 : Form
{
button1_MouseClick()
{
ucr1.BringToFront();
ucr1.Focus(); // 포커스를 해줘야만 Enter 이벤트가 발동한다. 중요하다.
}
}
class ucr1 : Usercontrol
{
private void ucr1_Enter(object sender, eventargs e)
{
//do something
}
}