web-dev-qa-db-fra.com

Comment ajouter une nouvelle ligne à c # DataTable dans 1 ligne de code?

Est-il possible d'ajouter une nouvelle ligne à un datatable en c # avec seulement 1 ligne de code? Je suis en train de dummer des données pour un test et il semble assez lent de devoir écrire quelque chose comme ceci:

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

Je pensais que vous pourriez faire quelque chose comme le code ci-dessous, mais je ne trouve pas la syntaxe correcte.

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

Et oui, je sais qu'au moment où j'ai pris le temps d'écrire cette question, j'aurais pu le coder assez longtemps au lieu de tergiverser :)

Merci!

14
JumpingJezza

Oui, vous pouvez faire ce qui suit:

dt.Rows.Add("Sydney");
19
Jeff Ogata

Si vous faites cela pour les tests unitaires, pourquoi ne pas simplement utiliser une méthode d'assistance, dans une classe statique ou, mieux encore, une classe de base de test?

J'ai toutes les classes de test héritant d'une classe de TestBase, où je peux ajouter des choses pour aider à tous les tests.

par exemple

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

Puis dans votre classe de test:

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

L'objectif ici est de minimiser le code de test et de réduire le code redondant (pour ne pas être sec).

HTH

3
RPM1984

Une autre façon serait de créer une fonction d'assistance pour le faire:

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
Chris

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

Pour créer rapidement un nouveau DataTable avec certaines données, vous pouvez tout faire en une seule ligne:

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