DataGridView从不同的类添加行

问题描述

我正在尝试从另一个类向DataGridView添加新行。

它在同一个类中工作:

public void Form1_Load(object sender,EventArgs e)
{
    string[] columns = { "Column A","Column B" };
    DataTable table = new DataTable();
    foreach (string column in columns)
    {
        table.Columns.Add(column,typeof(string));
    }
    dataGridView1.DataSource = table;
}

public void AddRow(string[] row)
{
    DataTable dt = dataGridView1.DataSource as DataTable;
    dt.Rows.Add(row);
    dataGridView1.DataSource = dt;
}

private void buttonAddRows_Click(object sender,EventArgs e)
{
    string[] results = new string[] { "result 1","result 2" };
    AddRow(results);
}

但是,如果我从另一个调用 AddRow(),则会引发异常:

System.NullReferenceException:“对象引用未设置为对象的实例。”

dt为空。

class Test
{
    public void CreateRows()
    {
        string[] results = new string[] { "result 1","result 2" };
        Form1 form1 = new Form1();
        form1.AddRow(results);
    }

从另一个添加行的最佳方法是什么?感谢您的帮助。

解决方法

谢谢,这是解决方案之一:

private static Form1 instance;
public static Form1 ReturnInstance()
{
    return instance;
}

public Form1()
{
    InitializeComponent();
    instance = this;
}

public void Form1_Load(object sender,EventArgs e)
{
    string[] columns = { "Column A","Column B" };
    foreach (string column in columns)
    {
        dataGridView1.Columns.Add(column,column);
    }
}

public void AddRow(string[] row)
{
    dataGridView1.Rows.Add(row);
}
public class Test
{
    public void CreateRows()
    {
        string[] results = new string[] { "result 1","result 2" };
        Form1 form1 = Form1.ReturnInstance();
        form1.AddRow(results);
    }
}

现在我正在寻找一种解决方案,该方法如何使用异步方法添加行