如何将gridview行添加到数据表?

我有一个gridview,它将包含一些’n’个行….现在我想将gridview的所有行添加到一个数据表中,该数据表将用于批量复制操作…

我找到了这个http://www.codeproject.com/KB/aspnet/GridView_To_DataTable.aspx

但我希望我的gridview的所有列都添加到数据网格的数据行中http://img85.imageshack.us/img85/4044/gridp.jpg

我想在提交时将gridview转换为数据表….任何建议……

编辑:

下面的答案有效,我也找到了答案……

DataTable dt = new DataTable(); dt.Columns.Add(new DataColumn("EmpId", typeof(Int64))); dt.Columns.Add(new DataColumn("FromDate", typeof(DateTime))); dt.Columns.Add(new DataColumn("ToDate", typeof(DateTime))); dt.Columns.Add(new DataColumn("DaysPresent", typeof(double))); dt.Columns.Add(new DataColumn("OpeningAdvance", typeof(double))); dt.Columns.Add(new DataColumn("AdvanceDeducted", typeof(double))); dt.Columns.Add(new DataColumn("RemainingAdvance", typeof(double))); dt.Columns.Add(new DataColumn("SalaryGiven", typeof(double))); dt.Columns.Add(new DataColumn("CreatedDate", typeof(DateTime))); foreach (GridViewRow row in gridEmployee.Rows) { if (row.RowType == DataControlRowType.DataRow) { DataRow dr = dt.NewRow(); dr["EmpId"] = Convert.ToInt64(((HiddenField)row.Cells[0].FindControl("HiddenId")).Value); dr["FromDate"] = Convert.ToDateTime(GetMonthNumberFromAbbreviation(fromdate[1].ToString()) + '/' + fromdate[0].ToString() + '/' + fromdate[2].ToString()); dr["ToDate"] = Convert.ToDateTime(GetMonthNumberFromAbbreviation(todate[1].ToString()) + '/' + todate[0].ToString() + '/' + todate[2].ToString()); dr["DaysPresent"] = Convert.ToDouble(((TextBox)row.Cells[3].FindControl("TxtDaysPresent")).Text); dr["OpeningAdvance"] = Convert.ToDouble(((TextBox)row.Cells[4].FindControl("txtOpeningAdv")).Text); dr["AdvanceDeducted"] = Convert.ToDouble(((TextBox)row.Cells[5].FindControl("TxtAdvanceDeducted")).Text); dr["RemainingAdvance"] = Convert.ToDouble(((TextBox)row.Cells[6].FindControl("TxtClosingAdvance")).Text); dr["SalaryGiven"] = Convert.ToDouble(((TextBox)row.Cells[7].FindControl("TxtSalary")).Text); dr["CreatedDate"] = Convert.ToDateTime(System.DateTime.Now.ToString()); dt.Rows.Add(dr); } } SqlBulkCopy sbc = new SqlBulkCopy(connectionString); sbc.DestinationTableName = "SalaryDetails"; sbc.ColumnMappings.Add("EmpId", "EmpId"); sbc.ColumnMappings.Add("FromDate", "FromDate"); sbc.ColumnMappings.Add("ToDate", "ToDate"); sbc.ColumnMappings.Add("DaysPresent", "DaysPresent"); sbc.ColumnMappings.Add("OpeningAdvance", "OpeningAdvance"); sbc.ColumnMappings.Add("AdvanceDeducted", "AdvanceDeducted"); sbc.ColumnMappings.Add("RemainingAdvance", "RemainingAdvance"); sbc.ColumnMappings.Add("SalaryGiven", "SalaryGiven"); sbc.ColumnMappings.Add("CreatedDate", "CreatedDate"); sbc.WriteToServer(dt); sbc.Close(); 

您可以逐行遍历datagrid并创建逗号分隔文件。 然后使用Bulk insert或bcp将数据插入db。

另一个方案

  DataTable dt = new DataTable(); for (int j = 0; j < grdList.Rows.Count; j++) { DataRow dr; GridViewRow row = grdList.Rows[j]; dr = dt.NewRow(); for (int i = 0; i < row.Cells.Count; i++) { dr[i] = row.Cells[i].Text; } dt.Rows.Add(dr); } SqlBulkCopy sbc = new SqlBulkCopy(targetConnStr); sbc.DestinationTableName = "yourDestinationTable"; sbc.WriteToServer(dt); sbc.Close();