[英]c# access and update datagridview data from another user control
[英]c# refresh datagridview of another usercontrol after inserting data in another user control
我的 c# windows 窗体项目中有多个用户控件。 现在我只有一个有多个按钮的表单,每个按钮都有相应的用户控件。 现在的问题是当我从usercontrol1向数据库插入数据时,我需要在usercontrol2的datagridview中查看插入的数据。
我假设您在 UserControl1 中有一个用于 Button 的单击事件处理程序,您可以调用该处理程序将数据插入到数据库中。
现在您必须从父窗体访问 UserControl2,找到 DataGridView 并再次进行数据绑定以获取新数据。
我现在没有visual studio,我尽力在这里制定代码。
获取父表单的语法:
Form parentForm = (this.Parent as Form);
然后找到usercontrol2
var uc2 = parentForm.Controls.Find("UserControl2", true);
然后找到DataGridView
var dg2 = (DataGridView)parentForm.Controls.Find("datagridview1", true);
然后做一个数据绑定
// Fetch Data from DataBase
dg2.DataBind();
您是否可以从表单中的 userControl2 访问 datagridview?
如果是这样,您应该在插入行后刷新 DataSource。
如果 usercontrol1 和 usercontrol2 是具有私有实现的自定义控件,您可以向 userControl1 添加事件,该事件将在保存数据时触发,并将方法添加到可以刷新 DataSource 的 userControl2
public partial class Form1:Form
{
public Form1()
{
InitializeComponent();
userControl1.DataSaved += (sender, e) => { userControl2.RefreshGrid(); }; // Attach event
}
}
class UserControl1 : UserControl
{
public event EventHandler DataSaved;
private void SaveData() // call this when user saves data
{
InsetDataToDb(); // real insert to db
var handler = DataSaved;
if (handler != null)
handler(this, EventArgs.Empty); // call event handler
}
}
class UserControl2 : UserControl
{
public void RefreshGrid()
{
// refresh data source of grid view
dataGridView.DataSource = GetDataSource();
}
}
在我当前的控件中,我在下面调用此方法以找到目标控件的正确实例并在那里刷新 Gridview。 为了能够访问目标控件类,我已经在当前控件中注册了它。 我还在目标控件中公开了它的刷新数据源方法,以便可以从我当前的控件中调用它们。
public void RefreshGridsAfterAddUpdate()
{
var ctrlTarget = ((Controls_MyUserControl) Parent.FindControl("myUserControl"));
if (ctrlTarget != null)
{
if (ctrlTarget.PageName == "MyUserControlInstance1")
{
var GridView1 = (GridView) ctrlTarget.FindControl("GridView1");
ctrlTarget.LoadTestingCenter();
GridView1?.DataBind();
}else if (ctrlTarget.PageName == "MyUserControlInstance2")
{
var GridView2 = (GridView) ctrlTarget.FindControl("GridView2");
ctrlTarget.LoadTestingCenterStudent();
GridView2?.DataBind();
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.