【问题标题】:How to create a DataTable in C# and how to add rows?如何在 C# 中创建 DataTable 以及如何添加行?
【发布时间】:2020-06-30 08:29:49
【问题描述】:

如何在 C# 中创建数据表?

我是这样做的:

 DataTable dt = new DataTable();
 dt.clear();
 dt.Columns.Add("Name");
 dt.Columns.Add("Marks");

如何查看DataTable的结构?

现在我想为Name 添加ravi,为Marks 添加500。我该怎么做?

【问题讨论】:

  • @Cute。只是一个评论 - 如果您使用的是 .NET 3.5,您应该真正了解 LINQ to SQL 提供的功能。如果你决定走 DataTable/DataSet 路线,至少要考虑创建强类型的 DataTables。

标签: c# ado.net datatable


【解决方案1】:

创建数据表:

DataTable MyTable = new DataTable(); // 1
DataTable MyTableByName = new DataTable("MyTableName"); // 2

向表格添加列:

 MyTable.Columns.Add("Id", typeof(int));
 MyTable.Columns.Add("Name", typeof(string));

向DataTable添加行方法一:

DataRow row = MyTable.NewRow();
row["Id"] = 1;
row["Name"] = "John";
MyTable.Rows.Add(row);

向DataTable添加行方法2:

MyTable.Rows.Add(2, "Ivan");

向DataTable添加行方法3(从另一个表中添加相同结构的行):

MyTable.ImportRow(MyTableByName.Rows[0]);

向DataTable添加行方法4(从另一个表添加行):

MyTable.Rows.Add(MyTable2.Rows[0]["Id"], MyTable2.Rows[0]["Name"]);

向DataTable添加行方法5(在索引处插入行):

MyTable.Rows.InsertAt(row, 8);

【讨论】:

  • 向 DataTable 添加列时,必须为每一列调用 `MyTable.Columns.Add()',还是可以在一个 .Add() 方法中列出所有列?跨度>
  • @KyleVassella MyTable.Columns.Add() 一个电话就够了。
【解决方案2】:

您可以在一行中添加行

    DataTable table = new DataTable();
    table.Columns.Add("Dosage", typeof(int));
    table.Columns.Add("Drug", typeof(string));
    table.Columns.Add("Patient", typeof(string));
    table.Columns.Add("Date", typeof(DateTime));

    // Here we add five DataRows.
    table.Rows.Add(25, "Indocin", "David", DateTime.Now);
    table.Rows.Add(50, "Enebrel", "Sam", DateTime.Now);
    table.Rows.Add(10, "Hydralazine", "Christoff", DateTime.Now);
    table.Rows.Add(21, "Combivent", "Janet", DateTime.Now);
    table.Rows.Add(100, "Dilantin", "Melanie", DateTime.Now);

【讨论】:

    【解决方案3】:

    问题1:如何在C#中创建DataTable?

    答案 1:

    DataTable dt = new DataTable(); // DataTable created
    
    // Add columns in your DataTable
    dt.Columns.Add("Name");
    dt.Columns.Add("Marks");
    

    注意:创建后不需要Clear()DataTable

    问题 2:如何添加行?

    答案2:添加一行:

    dt.Rows.Add("Ravi","500");
    

    添加多行:使用ForEach循环

    DataTable dt2 = (DataTable)Session["CartData"]; // This DataTable contains multiple records
    foreach (DataRow dr in dt2.Rows)
    {
        dt.Rows.Add(dr["Name"], dr["Marks"]);
    }
    

    【讨论】:

      【解决方案4】:

      您可以使用DataRow.Add(params object[] values) 而不是四行来编写一行

      dt.Rows.Add("Ravi", "500");
      

      当您创建新的DataTable 对象时,似乎没有需要在下一个语句中使用Clear DataTable。您还可以使用DataTable.Columns.AddRange 添加带有 on 语句的列。完整的代码将是。

      DataTable dt = new DataTable();
      dt.Columns.AddRange(new DataColumn[] { new DataColumn("Name"), new DataColumn("Marks") });     
      dt.Rows.Add("Ravi", "500");
      

      【讨论】:

        【解决方案5】:
        DataTable dt=new DataTable();
        DataColumn Name = new DataColumn("Name",typeof(string)); 
        
        dt.Columns.Add(Name);
        DataColumn Age = new DataColumn("Age", typeof(int));`
        
        dt.Columns.Add(Age);
        
        DataRow dr=dt.NewRow();
        
        dr["Name"]="Kavitha Reddy"; 
        dr["Age"]=24; 
        dt.add.Rows(dr);
        dr=dt.NewRow();
        
        dr["Name"]="Kiran Reddy";
        dr["Age"]=23; 
        dt.Rows.add(dr);
        Gv.DataSource=dt;
        Gv.DataBind();
        

        【讨论】:

          【解决方案6】:
          // Create a DataTable and add two Columns to it
          DataTable dt=new DataTable();
          dt.Columns.Add("Name",typeof(string));
          dt.Columns.Add("Age",typeof(int));
          
          // Create a DataRow, add Name and Age data, and add to the DataTable
          DataRow dr=dt.NewRow();
          dr["Name"]="Mohammad"; // or dr[0]="Mohammad";
          dr["Age"]=24; // or dr[1]=24;
          dt.Rows.Add(dr);
          
          // Create another DataRow, add Name and Age data, and add to the DataTable
          dr=dt.NewRow();
          dr["Name"]="Shahnawaz"; // or dr[0]="Shahnawaz";
          dr["Age"]=24; // or dr[1]=24;
          dt.Rows.Add(dr);
          
          // DataBind to your UI control, if necessary (a GridView, in this example)
          GridView1.DataSource=dt;
          GridView1.DataBind();
          

          【讨论】:

            【解决方案7】:

            现在最简单的方法是创建一个 DtaTable

            DataTable table = new DataTable
            {
                Columns = {
                    "Name", // typeof(string) is implied
                    {"Marks", typeof(int)}
                },
                TableName = "MarksTable" //optional
            };
            table.Rows.Add("ravi", 500);
            

            【讨论】:

              【解决方案8】:

              代码如下:

              DataTable dt = new DataTable(); 
              dt.Clear();
              dt.Columns.Add("Name");
              dt.Columns.Add("Marks");
              DataRow _ravi = dt.NewRow();
              _ravi["Name"] = "ravi";
              _ravi["Marks"] = "500";
              dt.Rows.Add(_ravi);
              

              要查看结构,或者我将其改写为架构,您可以通过执行以下操作将其导出到 XML 文件。

              要仅导出架构/结构,请执行以下操作:

              dt.WriteXMLSchema("dtSchemaOrStructure.xml");
              

              此外,您还可以导出数据:

              dt.WriteXML("dtDataxml");
              

              【讨论】:

              • 不要忘记调用 dt.AcceptChanges() 以防您将 DataView 与 CurrentRows 以外的过滤器一起使用。
              • @phoenix:我只是希望提问者能够愉快地与我的回答联系起来。
              • @Salamander2007 :它似乎只是在运行时创建的内存数据表,所以我们不需要调用 AcceptChanges()
              • 我认为 DataTable (dt) 上没有名为 NewDataRow 的方法。但是,有一个 NewRow 方法,但由于它最初并未“附加”到表中,因此您仍然必须将其添加到表中,例如 var dr = dt.NewRow(); dt.Rows.Add(dr);
              • 我现在在此页面的其他地方看到@rahul 在他的回答中也提到了这一点。
              【解决方案9】:
              DataTable dt=new DataTable();
              Datacolumn Name = new DataColumn("Name");
              Name.DataType= typeoff(string);
              Name.AllowDBNull=false; //set as null or not the default is true i.e null
              Name.MaxLength=20; //sets the length the default is -1 which is max(no limit)
              dt.Columns.Add(Name);
              Datacolumn Age = new DataColumn("Age", typeoff(int));`
              
              dt.Columns.Add(Age);
              
              DataRow dr=dt.NewRow();
              
              dr["Name"]="Mohammad Adem"; // or dr[0]="Mohammad Adem";
              dr["Age"]=33; // or dr[1]=33;
              dt.add.rows(dr);
              dr=dt.NewRow();
              
              dr["Name"]="Zahara"; // or dr[0]="Zahara";
              dr["Age"]=22; // or dr[1]=22;
              dt.rows.add(dr);
              Gv.DataSource=dt;
              Gv.DataBind();
              

              【讨论】:

                【解决方案10】:

                你也可以传入一个对象数组,像这样:

                DataTable dt = new DataTable();
                dt.Clear();
                dt.Columns.Add("Name");
                dt.Columns.Add("Marks");
                object[] o = { "Ravi", 500 };
                dt.Rows.Add(o);
                

                甚至:

                dt.Rows.Add(new object[] { "Ravi", 500 });
                

                【讨论】:

                • 另一种选择是注意上面显示的Add 方法具有可变数量的参数的重载,因此您可以将其缩短为dt.Rows.Add("Ravi", 500); 并且工作方式相同。使用这些方法中的任何一种都会发出一个大警告:您必须以与定义列的顺序完全相同的顺序提供这些参数,否则您将收到错误消息。 (所以谨慎使用!)
                【解决方案11】:

                除了其他答案。

                如果您控制 DataTable 的结构,则有一个添加行的快捷方式:

                // 假设您在示例中定义了一个名为 dt 的数据表 dt.Rows.Add("名称", "标记");

                DataRowCollection.Add() 方法有一个重载,它接受一个对象的参数数组。此方法允许您根据需要传递任意数量的值,但它们的顺序必须与表中定义的列的顺序相同。

                因此,虽然这是一种添加行数据的便捷方式,但使用起来可能存在风险。如果表结构发生变化,您的代码将失败。

                【讨论】:

                  【解决方案12】:

                  为此,您必须将数据行添加到数据表中。

                  // Creates a new DataRow with the same schema as the table.
                  DataRow dr = dt.NewRow();
                  
                  // Fill the values
                  dr["Name"] = "Name";
                  dr["Marks"] = "Marks";
                  
                  // Add the row to the rows collection
                  dt.Rows.Add ( dr );
                  

                  【讨论】:

                    【解决方案13】:

                    添加一行:

                    DataRow row = dt.NewRow();
                    row["Name"] = "Ravi";
                    row["Marks"] = 500;
                    dt.Rows.Add(row);
                    

                    查看结构:

                    Table.Columns
                    

                    【讨论】:

                      猜你喜欢
                      • 2011-04-14
                      • 1970-01-01
                      • 1970-01-01
                      • 2016-04-21
                      • 2016-09-04
                      • 2022-06-10
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多