2010-09-20 71 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");