我的c#windows窗体项目中有多个用户控件。现在我只有一个有多个按钮的表单,每个按钮都有相应的用户控件。现在问题是当我从usercontrol1向数据库插入数据时,我需要在usercontrol2的datagridview中查看插入的数据。
答案 0 :(得分:0)
我假设您在UserControl1中有一个Button事件处理程序,您可以调用该处理程序将数据插入数据库。
现在您必须从父窗体访问UserControl2,找到DataGridView并再次执行数据绑定以获取新数据。
我现在没有视觉工作室,我尽力在这里制定代码。
获取父表单的语法:
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();
答案 1 :(得分:0)
您是否可以从表单访问userControl2中的datagridview?
如果是这样,您应该在插入行后刷新DataSource。
如果usercontrol1和usercontrol2是具有私有实现的自定义控件,则可以向userControl1添加事件,该事件将在保存数据时触发,而userControl2的方法可以刷新DataSource
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();
}
}
答案 2 :(得分:0)
在我当前的控件中,我在下面调用此方法以找到目标控件的正确实例并在那里刷新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();
}
}
}