C# DataGridView从不同类添加行
我正在尝试从另一个类向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) {
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()代码>不会触发窗体加载事件。formsLoad
事件在显示时被激发,但从未被激发过。
public class Test
{
public void CreateRows()
{
string[] results = new string[] { "result 1", "result 2" };
Form1 form1 = Form1.ReturnInstance();
form1.AddRow(results);
}
}