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);

谢谢你的关心。

C#在单独的方法中将行/列添加到现有的DataTable中

你想在这里做什么?

    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)