Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DataGridView从不同类添加行_C#_Windows Forms Designer - Fatal编程技术网

C# DataGridView从不同类添加行

C# DataGridView从不同类添加行,c#,windows-forms-designer,C#,Windows Forms Designer,我正在尝试从另一个类向DataGridView添加新行 它在同一类中工作: public void Form1_Load(object sender, EventArgs e) { string[] columns = { "Column A", "Column B" }; DataTable table = new DataTable(); foreach (string column in columns) {

我正在尝试从另一个类向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);
}

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

必读,它被称为
new
,原因很好-它创建了一个新对象。仔细查看后。
Test
类方法
CreateRows
中的代码没有执行您认为的操作。代码“创建”一个新的
Form1
,调用
Form1.AddRow..
方法,然后退出。此表单从不向用户显示。您在行中得到一个
null
异常…
dt.Rows.Add(row)dt
还没有任何行。调用表单构造函数
Form1 Form1=new Form1()不会触发窗体加载事件。forms
Load
事件在显示时被激发,但从未被激发过。
public class Test
{
    public void CreateRows()
    {
        string[] results = new string[] { "result 1", "result 2" };
        Form1 form1 = Form1.ReturnInstance();
        form1.AddRow(results);
    }
}