2010-09-20 75 views
14

Có thể thêm một hàng mới vào một giá trị trong C# chỉ với 1 dòng mã không? Tôi chỉ dummying một số dữ liệu cho một thử nghiệm và nó có vẻ khá chậm chạp trong việc phải viết một cái gì đó như thế này:Cách thêm hàng mới vào C# DataTable trong 1 dòng mã?

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

tôi đã giả định bạn có thể làm một cái gì đó giống như mã dưới đây, nhưng tôi không thể tìm thấy đúng cú pháp.

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

Và vâng tôi biết trong thời gian tôi đã thực hiện để viết câu hỏi này tôi đã có thể hoàn thành mã hóa nó trở thành chặng đường dài thay vì trì hoãn về nó :)

Cảm ơn!

Trả lời

19

Vâng, bạn có thể làm như sau:

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

Không cần tạo mảng. Nó đã chấp nhận một đối số mảng 'params'. –

+0

@ Pierre-Alain Vigeant - ahah tôi hiểu rồi! Tôi chỉ có thể đi 'dt.Rows.Add (" Sydney "); ' – JumpingJezza

3

Nếu bạn đang làm điều này cho đơn vị xét nghiệm, tại sao không chỉ cần sử dụng một phương pháp helper, hoặc trong một số lớp tĩnh, hoặc chưa một lớp cơ sở thử nghiệm tốt hơn ?

Tôi có tất cả các lớp thử nghiệm kế thừa từ một lớp TestBase, nơi tôi có thể thêm công cụ để giúp đỡ tất cả các bài kiểm tra.

ví dụ

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

Sau đó, trong lớp thử nghiệm của bạn:

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

Mục tiêu ở đây là để giữ mã kiểm tra của bạn tối thiểu và giảm mã dự phòng (không phải là DRY).

HTH

+0

Ah bây giờ nếu tôi đã làm nó đúng cách và sử dụng Kiểm tra Đơn vị này sẽ là con đường để đi. – JumpingJezza

+0

@JumpingJezza - tôi đã đọc tuyên bố "Tôi chỉ đọc một số dữ liệu để kiểm tra", khi bạn tạo các bài kiểm tra đơn vị. – RPM1984

+0

xin lỗi vì đã gây hiểu lầm cho bạn nhưng tôi chỉ cần rút một số mã ra khỏi dự án chính và tạo một dự án mới để kiểm tra một số chức năng cụ thể, chứ không phải là cách tạo thử nghiệm đơn vị thích hợp. :) – JumpingJezza

2

Một cách khác là để thực hiện một chức năng helper để làm điều đó:

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 = new 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"); 
Các vấn đề liên quan