如何创建一个 DataTable 并向其中添加行?

250

我尝试创建一个DataTable,并像这样添加行:

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

如何查看 DataTable 的结构?

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


2
@Cute。只是一条评论 - 如果您正在使用.NET 3.5,则应该真正了解LINQ to SQL提供的内容。如果您决定采用DataTable / DataSet路线,至少要研究创建强类型的DataTable。 - RichardOD
14个回答

319

以下是代码:

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

如果想查看结构,或者更准确地说是模式(schema),可以通过以下步骤将其导出为XML文件。

仅导出模式/结构,请执行以下操作:

dt.WriteXMLSchema("dtSchemaOrStructure.xml");

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

dt.WriteXML("dtDataxml");

1
不要忘记在使用DataView筛选器时调用dt.AcceptChanges()。 - Salamander2007
@phoenix:我只是想让提问者对我的回答感到满意。 - this. __curious_geek
@Salamander2007:看起来只是在运行时创建了一个内存数据表,所以我们不需要调用AcceptChanges()。 - this. __curious_geek
我认为DataTable (dt)中没有名为“NewDataRow”的方法。但是,有一个名为“NewRow”的方法,但由于它最初未“连接”到该表,因此您仍然必须将其添加到该表中,例如var dr = dt.NewRow(); dt.Rows.Add(dr); - Funka
我现在在这个页面的其他地方也看到了@rahul在他的回答中提到了这一点。 - Funka
显示剩余2条评论

83

您也可以传递一个对象数组,像这样:

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

12
另一个选择是注意上面显示的“Add”方法有一个带有可变参数数量的重载,所以您可以将其缩短为“dt.Rows.Add(“ Ravi”,500);”并且将起作用。但这两种方法都有一个非常重要的警告:您必须按照定义列的确切顺序提供这些参数,否则会出错。(因此请谨慎使用!) - Funka

83

创建数据表:

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

在表中添加列:

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

向DataTable添加行的方法1:

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

向 DataTable 添加行的第二种方法:

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

向DataTable添加行的第三种方法(通过与相同结构的另一个表格添加行):

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() 方法内部? - Kyle Vassella
@KyleVassella 只需要一次调用 MyTable.Columns.Add() - Hamed Naeemaei

38
// 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();

32
添加一行:

要添加一行:

DataRow row = dt.NewRow();
row["Name"] = "Ravi";
row["Marks"] = 500;
dt.Rows.Add(row);
要查看结构:
Table.Columns

25

您可以在单行中添加行

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

21

你可以使用DataRow.Add(params object[] values)编写一行代码,而不是四行。

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

创建新的DataTable对象时,在下一条语句中似乎没有必要清除DataTable。您还可以使用DataTable.Columns.AddRange一次添加多列。完整代码如下:

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

13

目前最简单的方法是创建一个DtaTable

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

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接