从另一个类填充网格

时间:2018-07-26 18:19:00

标签: c# winforms class datagrid

这个问题类似于:

-How to change a label from another class? c# windows forms visual studio

但是,我在那里没有找到合适的答案:

我想在另一个类的方法被调用时请求更新网格格式。

到目前为止,我在与表单相同的公共局部类中拥有此按钮(按钮是临时的)。

private void button1_Click(object sender, EventArgs e)
{
    UpdateNodeForm();
}

public void UpdateNodeForm()
{
    Debug.WriteLine("-----message recieved to update tables-----");
    DataTable nodeTable = new DataTable();
    nodeTable = SqlConnections.GetNodeTableData();
    dataGridViewNodes.DataSource = nodeTable.DefaultView;
}

当我单击按钮时,上面的代码可以正常工作。

但是,当我从另一个公共静态类中运行以下内容时,该方法在新实例中被调用,但是它不会更新表单(表单类称为Tables)。

public static void InsertNode(string node_name, float x, float y, float z_cover)
{        
    //bunch of other stuff here that I've stripped out.

    Tables tables = new Tables();
    Debug.WriteLine("-----send instruction to rebuilt nodes tables-----");
    tables.UpdateNodeForm();
}

以上显然不是我应该这样做的方式。 我怎样才能使方法UpdateNodeForm();监听InsertNode();要运行的方法?

1 个答案:

答案 0 :(得分:1)

这里的问题是您正在创建Tables的新实例并在其上调用UpdateNodeForm。

public static void InsertNode(string node_name, float x, float y, float z_cover)
{
    Tables tables = new Tables(); // This creates a new instance of Tables
    tables.UpdateNodeForm(); // This updates the new instance of Tables
}

您需要获取对原始“表格”表单的引用,并在其上调用UpdateNodeForm,或者,如果您仅打算拥有一个表格表单,则可以更新静态InsertNode函数以查找现有表单并更新该表单

public static void InsertNode(string node_name, float x, float y, float z_cover)
{
    Tables tables = Application.OpenForms.OfType<Tables>().FirstOrDefault();
    if (tables != null)
        tables.UpdateNodeForm();
}

这将是在Application.OpenForms列表中查找Tables类型的Forms。如果有一个,它将获得对它的引用并调用UpdateNodeForm()。如果它不存在,那么它将什么都不做。

编辑: 确保您使用以下名称空间:

using System.Windows.Forms;