如何用一行代码在C# DataTable中添加新行?

18

有没有可能用只有1行代码就在C#的datatable中添加一行新纪录?我正在为测试编写一些虚拟数据,但是像下面这样写似乎相当缓慢:

DataTable dt= new DataTable("results");
DataRow dr1 = dt.NewRow();
dr1[0] = "Sydney";
dt.Rows.Add(dr1);
DataRow dr2 = dt.NewRow();
dr2[0] = "Perth";
dt.Rows.Add(dr2);
DataRow dr3 = dt.NewRow();
dr3[0] = "Darwin";
dt.Rows.Add(dr3);

我原以为你可以像下面的代码一样做,但是我找不到正确的语法。

dt.Rows.Add(dt.NewRow()[0]{"Sydney"});
dt.Rows.Add(dt.NewRow()[0]{"Perth"});
dt.Rows.Add(dt.NewRow()[0]{"Darwin"});

是的,我知道在写这个问题的时间里,我本可以用长方法完成编码,而不是拖延它 :)

谢谢!

5个回答

21

是的,您可以进行以下操作:

dt.Rows.Add("Sydney");

4
不需要创建一个数组。它已经接受一个params数组参数。 - Pierre-Alain Vigeant
@Pierre-Alain Vigeant - 哈哈,我明白了!我只需要执行 dt.Rows.Add("悉尼"); 即可。 - JumpingJezza

3

创建一个名为dtStudent的DataTable对象。

//Add new column
dtStudent.Columns.AddRange (
new DataColumn[] {
new DataColumn("SlNo", typeof(int)), 
new DataColumn("RollNumber", typeof(string)),
new DataColumn("DateOfJoin", typeof(DateTime)),
new DataColumn("Place", typeof(string)),
new DataColumn("Course", typeof(string)),
new DataColumn("Remark", typeof(string))
}
);
// Add value to the related column
dtStudent.Rows.Add(1, "10001", DateTime.Now, "Bhubaneswar", "MCA", "Good");

3
如果您是为了单元测试而这样做,为什么不使用助手方法呢?可以将其放在某个静态类中,或者更好的方式是放在测试基类中。
我让所有测试类都继承自TestBase类,在其中添加一些有助于所有测试的东西。
例如:
[TestClass]
public class TestBase
{
   protected void AddMockDataRow(DataTable dt)
   {
      DataRow dr = dt.NewRow();
      dr[0] = "Sydney"; // or you could generate some random string.
      dt.Rows.Add(dr);
   }
}

然后在您的测试类中:

[TestClass]
public class SomeTest : TestBase
{
    [TestMethod]
    public void Ensure_Something_Meets_Some_Condition()
    {
       // Arrange.
       DataTable dt = new DataTable("results");

       // Act.
       AddMockDataRow(dt);

       // Assert.
       Assert.IsTrue(someCondition);
    }
}

这里的目标是保持测试代码的最小化,并减少冗余代码(而不是DRY原则)。

希望有所帮助。


啊,如果我做得正确并使用单元测试,那么这就是正确的方法。 - JumpingJezza
@JumpingJezza - 我理解你的话是在创建单元测试时,将一些数据虚拟化以进行测试。 - RPM1984
抱歉误导了您,但我只是从主项目中提取一些代码,并创建一个新项目来测试某些特定功能,而不是创建单元测试的正确方式。 :) - JumpingJezza

3
另一种方法是创建一个帮助函数来完成它:
DataTable MakeDataTable(String name, String contents)
{
  DataTable dt = new DataTable(name);
  foreach (string val in contents.Split(","))
  {
    DataRow dr = dt.NewRow();
    dr[0] = val;
    dt.Rows.Add(dr);
  }
  return dt;
}

MakeDataTable("results","Sydney,Perth,Darwin");

2

要快速创建一张包含数据的新DataTable,可以使用以下一行代码:

DataTable testData = new DataTable( "TestData" ) {
    Columns = { "TestColumn1", "TestColumn2" },
    Rows = {
        { "Row1Col1Val", "Row1Col2Val"},
        { "Row2Col1Val", "Row2Col2Val"}
    }
};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接