向DataTable中插入新行

68

我有一个填充了员工数据的DataTable,例如...

Staff 1 - Day 1 - Total
Staff 1 - Day 2 - Total
Staff 1 - Day 3 - Total
Staff 2 - Day 1 - Total
Staff 2 - Day 2 - Total
Staff 2 - Day 3 - Total
Staff 2 - Day 4 - Total

我想修改代码使结果变成以下形式...

Staff 1 - Day 1 - Total
Staff 1 - Day 2 - Total
Staff 1 - Day 3 - Total
Total   -       - Total Value
Staff 2 - Day 1 - Total
Staff 2 - Day 2 - Total
Staff 2 - Day 3 - Total
Staff 2 - Day 4 - Total
Total   -       - Total Value

总之,我需要在每个员工记录的末尾插入合计行。

所以,我的问题是如何向数据表中插入一行?谢谢。

5个回答

119

@William,您可以使用DataTable的NewRow方法获取一个空数据行,并使用与DataTable相同的模式填充此数据行,然后使用.Rows.Add(DataRow).Rows.InsertAt(DataRow, Position)将该行添加到DataTable中。以下是一个模板代码,您可以根据需要进行修改。

//Creating dummy datatable for testing
DataTable dt = new DataTable();
DataColumn dc = new DataColumn("col1", typeof(String));
dt.Columns.Add(dc);

dc = new DataColumn("col2", typeof(String));
dt.Columns.Add(dc);

dc = new DataColumn("col3", typeof(String));
dt.Columns.Add(dc);

dc = new DataColumn("col4", typeof(String));
dt.Columns.Add(dc);

DataRow dr = dt.NewRow();

dr[0] = "coldata1";
dr[1] = "coldata2";
dr[2] = "coldata3";
dr[3] = "coldata4";

dt.Rows.Add(dr);//this will add the row at the end of the datatable
//OR
int yourPosition = 0;
dt.Rows.InsertAt(dr, yourPosition);

75
// get the data table
DataTable dt = ...;

// generate the data you want to insert
DataRow toInsert = dt.NewRow();

// insert in the desired place
dt.Rows.InsertAt(toInsert, index);

我将循环遍历数据表。因此,每次插入新行时,行数都会增加,或者只有在编写AcceptChanges()时才会增加。 - william
@william:一旦您插入行,“Rows.Count”将会增加。 “AcceptChanges”将重置所有新行上的“RowState”,使它们不再表示它们是新的。 - Adam Robinson
谢谢。但是,省略代码并不会有所帮助。但我知道你的意思,我应该能够解决它。再次感谢。 - KWallace

37
// create table
var dt = new System.Data.DataTable("tableName");

// create fields
dt.Columns.Add("field1", typeof(int));
dt.Columns.Add("field2", typeof(string));
dt.Columns.Add("field3", typeof(DateTime));

// insert row values
dt.Rows.Add(new Object[]{
                123456,
                "test",
                DateTime.Now
           });

3
完美的解决方案,谢谢。 - Gabriel Bernardone

5
In c# following code insert data into datatable on specified position

DataTable dt = new DataTable();
dt.Columns.Add("SL");
dt.Columns.Add("Amount");

dt.rows.add(1, 1000)
dt.rows.add(2, 2000)

dt.Rows.InsertAt(dt.NewRow(), 3);

var rowPosition = 3;
dt.Rows[rowPosition][dt.Columns.IndexOf("SL")] = 3;
dt.Rows[rowPosition][dt.Columns.IndexOf("Amount")] = 3000;

0
你可以这样做,我正在使用

DataTable 1.10.5

用以下代码:

var versionNo = $.fn.dataTable.version;
alert(versionNo);

这是我使用 row.add 在我的 DataTable 中插入新记录的方法(我的表格有10列),其中也可以包含 HTML 标签元素:
function fncInsertNew() {
            var table = $('#tblRecord').DataTable();

            table.row.add([
                    "Tiger Nixon",
                    "System Architect",
                    "$3,120",
                    "2011/04/25",
                    "Edinburgh",
                    "5421",
                    "Tiger Nixon",
                    "System Architect",
                    "$3,120",
                    "<p>Hello</p>"
            ]).draw();
        }

如果需要同时进行多个插入操作,请使用 rows.add

var table = $('#tblRecord').DataTable();

table.rows.add( [ {
        "Tiger Nixon",
        "System Architect",
        "$3,120",
        "2011/04/25",
        "Edinburgh",
        "5421"
    }, {
        "Garrett Winters",
        "Director",
        "$5,300",
        "2011/07/25",
        "Edinburgh",
        "8422"
    }]).draw();

3
我认为OP指的是C#而不是JavaScript - 但值得赞扬的是,他们没有具体说明。 - bagofmilk
这个回答与问题无关,问题是关于.NET中的DataTable对象,而不是DataTables JavaScript包。 - Phil Nicholas

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