Reputation: 13
I want to refresh a datagridview on my User Control, I call the user control with a BringToFront(); action on my main form, is there any event so I can refresh the datagridview once the User control is set to front? something like:
Custom Control: (Has 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();
}
}
}
Main form:
private void btnOverview_Click(object sender, EventArgs e)
{
ccOverview.BringToFront();
txtTitle.Text = "Healthcare - Overview";
RefreshGrid(); // Does not exist in the current context
}
Upvotes: 0
Views: 1550
Reputation: 11
class Form1 : Form
{
button1_MouseClick()
{
ucr1.BringToFront();
ucr1.Focus(); // 포커스를 해줘야만 Enter 이벤트가 발동한다. 중요하다.
}
}
class ucr1 : Usercontrol
{
private void ucr1_Enter(object sender, eventargs e)
{
//do something
}
}
Upvotes: 1
Reputation: 81493
It seems easier to just group these 2 methods together. Its simple its evident, its easily maintainable and you don't have to plumb up other events to do magic things
Example
public void RefreshMyAwesomeGrid()
{
using (DatabaseContext db = new DatabaseContext())
{
customersBindingSource.DataSource = db.Customers.ToList();
}
}
...
MyUserControl.BringToFront();
RefreshMyAwesomeGrid();
Update
The thing is that I can not acces the datagrid from my main form, on my main form I have a button and once that button is pressed it brings the user control to front so I have to put the datagridview refresh action in the User Control but I want to trigger it with a main form action
Assuming your DataGrid is in your userControl... Unfortunately BringToFront
cant be overridden. However, you have a couple of options.
The simplest, would be just put a public method on your UserControl
class RefreshMyAwesomeGrid
. when you call BringToFront
call RefreshMyAwesomeGrid
Either that, or just make your OwnBringToFrontPlusRefresh
<-- seems a bit meh though
Or you could use decoupled messages depending on if you are using any frameworks
Update 2
Just dig in to your user control
private void btnOverview_Click(object sender, EventArgs e)
{
ccOverview.BringToFront();
txtTitle.Text = "Healthcare - Overview";
ccOverview.RefreshGrid(); // exists now
}
Upvotes: 2