2010-09-20 70 views
14

是否有可能用一行代码在c#中向数据表添加新行?我只是dummying了一些数据的测试,似乎很慢有写是这样的:如何在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"}); 

是的,我知道的时候,我已经采取了写这个问题,我可能已经完成了它的编码很长的路要走,而不是拖延一下吧:)

谢谢!

回答

19

是的,你可以做到以下几点:

dt.Rows.Add("Sydney"); 
+4

不需要创建数组。它已经接受一个'params'数组参数。 – 2010-09-20 03:13:52

+0

@ Pierre-Alain Vigeant - 我明白了!我可以去'dt.Rows.Add(“Sydney”);' – JumpingJezza 2010-09-20 04:36:33

3

如果你这样做单元测试,为什么不直接使用一个辅助方法,无论是在一些静态类,或者更好的测试基础类?

我有从TestBase类继承的所有测试类,在那里我可以添加东西来帮助所有的测试。

e.g

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

这里的目标是让你的测试代码最小,减少冗余代码(不是干)。

HTH

+0

现在如果我正确地做了这件事,并且使用单元测试,这将是一条路。 – JumpingJezza 2010-09-20 03:33:03

+0

@JumpingJezza - 当你在创建单元测试时,我阅读了“我只是为了测试而弄到一些数据”的声明。 – RPM1984 2010-09-20 03:36:13

+0

对不起,误导你,但我只是从主项目拉出一些代码,并创建一个新的项目来测试一些特定的功能,而不是创建单元测试的正确方法。 :) – JumpingJezza 2010-09-20 03:40:44

2

另一种方法是使一个辅助函数来做到这一点:

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

的DataTable 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");