C#在单独的方法中将行/列添加到现有的DataTable中
本文关键字:添加 DataTable 单独 方法 | 更新日期: 2023-09-27 18:21:25
EDIT:对不起,伙计们,我对这件事有点盲目,我在下面的"问题"下面发布了"解决方案"。
原件:
我似乎无法解决这个问题(即使在SO上搜索了很多):我有一个DataTable对象,我想为数据填充"准备"如下:
我的模型类属性(类名"DataMdl"):
private static DataTable _datatbl;
public DataTable datatbl
{
get { return _datatbl; }
set
{
_datatbl = value;
OnPropertyChanged(new PropertyChangedEventArgs("datatbl"));
}
}
ViewModel方法中预数据表的调用:
prepdatatable(DataMdl.datatbl, 5, 9)
我的预数据表方法:
private void prepdatatable(DataTable dt, int rowcount, int colcount)
{
dt = new DataTable();
int i = 0;
for (i = 0; i < colcount; i++)
{
dt.Columns.Add("col" + i);
}
for (i = 0; i < rowcount; i++)
{
dt.Rows.Add("row" + i);
}
}
在调用上述方法后,我尝试在用调用prepdatatable的方法中填充DataTable
DataMdl.datatbl.Rows[0][0] = "..."
DataMdl.datatbl.Rows[0][1] = "..."
...
DataMdl.datatbl.Rows[1][0] = "..."
...
and so on
在这种情况下,我在DataMdl.datatbl.上得到一个NullReferenceException
当我试图在prepdatatable外部初始化DataMdl.datatbl时,我在prepdatatable内部的"dt"上得到了一个NullReferenceException。
"解决方案":只需让prepdatatable返回一个DataTable而不是void,然后将其值分配给属性DataMdl.datatbl:
private DataTable prepdatatable(int rowcount, int colcount)
{
var dt = new DataTable();
int i = 0;
for (i = 0; i < colcount; i++)
{
dt.Columns.Add("col" + i);
}
for (i = 0; i < rowcount; i++)
{
dt.Rows.Add("row" + i);
}
return dt;
}
和
DataMdl.datatbl = prepdatatable(5, 9);
谢谢你的关心。
你想在这里做什么?
for (i = 0; i < rowcount; i++)
{
var r = dt.NewRow();
dt.Rows.Add(r);
}
我有一种感觉,这就是例外的根源。看看这个:如何在一行代码中向c#DataTable添加新行。您似乎正在尝试添加一个没有值的行。默认情况下,新行为null,但已初始化。然后,您尝试将其添加到数据表中。为什么不像添加列那样添加行呢?
假设这是数据表的初始化,并且在这里调用方法
datatbl = new DataTable();
prepdatatable(datatbl, 5, 9);
这个方法不会获取数据表,它会从中获取一个副本,您是通过值而不是通过引用发送数据表
private void prepdatatable(DataTable dt, int rowcount, int colcount)
{
int i = 0;
for (i = 0; i < colcount; i++)
{
dt.Columns.Add("col" + i);
}
for (i = 0; i < rowcount; i++)
{
var r = dt.NewRow();
dt.Rows.Add(r);
}
}
我认为您的方法应该可以正常工作,而问题仅在于参数发送方式只要改变对的方法调用
prepdatatable(ref datatbl, 5, 9);
的标题
private void prepdatatable(ref DataTable dt, int rowcount, int colcount)