c#在另一个用户控件中插入数据后刷新另一个usercontrol的datagridview

时间:2017-06-13 10:51:57

标签: c#

我的c#windows窗体项目中有多个用户控件。现在我只有一个有多个按钮的表单,每个按钮都有相应的用户控件。现在问题是当我从usercontrol1向数据库插入数据时,我需要在usercontrol2的datagridview中查看插入的数据。

3 个答案:

答案 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();
        }
    }
}
相关问题