Как добавить новую строку в c # DataTable в 1 строку кода? - PullRequest
14 голосов
/ 20 сентября 2010

Возможно ли добавить новую строку в datatable в c # всего с 1 строкой кода?Я просто собираю некоторые данные для теста, и кажется довольно медленным писать что-то вроде этого:

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 ]

19 голосов
/ 20 сентября 2010

Да, вы можете сделать следующее:

dt.Rows.Add("Sydney");
3 голосов
/ 20 сентября 2010

Если вы делаете это для модульных тестов, почему бы просто не использовать вспомогательный метод, либо в каком-то статическом классе, либо еще лучше в базовом классе тестирования?

У меня есть все тестовые классы, унаследованные от класса TestBase, куда я могу добавить материал, чтобы помочь всем тестам.

* 1005 например *

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

Цель здесь - сохранить минимальный тестовый код и сократить избыточный код (не быть СУХИМЫМ).

НТН

2 голосов
/ 20 сентября 2010

Другим способом было бы сделать вспомогательную функцию для этого:

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 голосов
/ 27 августа 2018

Чтобы быстро создать новую таблицу данных с некоторыми данными, вы можете сделать все в одной строке:

DataTable testData = new DataTable( "TestData" ) {
    Columns = { "TestColumn1", "TestColumn2" },
    Rows = {
        { "Row1Col1Val", "Row1Col2Val"},
        { "Row2Col1Val", "Row2Col2Val"}
    }
};
0 голосов
/ 08 ноября 2017

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");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...