【问题标题】:How to add a new row to c# DataTable in 1 line of code?如何在 1 行代码中向 c# DataTable 添加新行?
【发布时间】:2011-04-14 11:43:36
【问题描述】:

是否可以仅用 1 行代码在 c# 中向数据表中添加新行?我只是在为测试虚拟化一些数据,而编写这样的东西似乎很慢:

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

是的,我知道在我花时间写这个问题的时候,我本可以完成它的编码而不是拖延:)

谢谢!

【问题讨论】:

    标签: c# datatable


    【解决方案1】:

    是的,您可以执行以下操作:

    dt.Rows.Add("Sydney");
    

    【讨论】:

    • 不需要创建数组。它已经接受 params 数组参数。
    • @Pierre-Alain Vigeant - 啊哈我明白了!我可以去dt.Rows.Add("Sydney");
    【解决方案2】:

    如果您正在为单元测试执行此操作,为什么不在某个静态类或更好的测试基类中使用辅助方法?

    我的所有测试类都继承自一个 TestBase 类,我可以在其中添加一些东西来帮助所有测试。

    例如

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

    这里的目标是保持您的测试代码最少并减少冗余代码(不是 DRY)。

    HTH

    【讨论】:

    • 啊,如果我做得正确并使用单元测试,这将是可行的方法。
    • @JumpingJezza - 当您正在创建单元测试时,我读到了“我只是在为测试虚拟化一些数据”的声明。
    • 很抱歉误导您,但我只是从主项目中提取一些代码并创建一个新项目来测试某些特定功能,而不是创建单元测试的正确方法。 :)
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      数据表 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");
      

      【讨论】:

        【解决方案5】:

        要快速创建包含一些数据的新 DataTable,您可以在一行中完成所有操作:

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

        【讨论】:

          猜你喜欢
          • 2012-10-03
          • 2011-04-18
          • 1970-01-01
          • 2017-12-22
          • 2013-11-02
          • 2013-02-16
          • 1970-01-01
          • 1970-01-01
          • 2014-03-19
          相关资源
          最近更新 更多