问题描述
我有一个gridview,它将包含一些'n'行的数目....现在我想添加gridview的所有行到将用于批量复制操作的数据表...我发现这个
但是我希望将gridview的所有列添加到datatable
的数据行中
我要将gridview转换为datatable在submit ....任何建议...
编辑:
下面的回答正常,我也找到了一个答案...
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(GridEmployee.Rows中的GridViewRow行)
{
if(row.RowType == DataControlRowType.DataRow)
{
DataRow dr = dt .NewRow();
dr [EmpId] = Convert.ToInt64(((HiddenField)row.Cells [0] .FindControl(HiddenId))。
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))。
dr [OpeningAdvance] = Convert.ToDouble(((TextBox)row.Cells [4] .FindControl(txtOpeningAdv))。
dr [AdvanceDeducted] = Convert.ToDouble(((TextBox)row.Cells [5] .FindControl(TxtAdvanceDeducted))。
dr [RemainingAdvance] = Convert.ToDouble(((TextBox)row.Cells [6] .FindControl(TxtClosingAdvance))。
dr [SalaryGiven] = Convert.ToDouble(((TextBox)row.Cells [7] .FindControl(TxtSalary))。
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,并进行逗号分离文件。然后使用批量插入或bcp将数据插入数据库。
另一个解决方案
DataTable dt = new DataTable();
for(int j = 0; j< grdList.Rows.Count; j ++)
{
DataRow dr;
GridViewRow row = grdList.Rows [j];
dr = dt.NewRow(); (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();
I have a gridview which will contain some 'n' number of rows.... Now i want to add all rows of the gridview to a datatable which will be used for bulkcopy operation...
I have found this http://www.codeproject.com/KB/aspnet/GridView_To_DataTable.aspx
But i want all columns of my gridview to be added to the datarow of the datatableGrid http://img85.imageshack.us/img85/4044/gridp.jpg
I want to convert gridview to datatable on submit.... Any suggestion...
EDIT:
Answer below works and i have found an answer too...
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();
you can traverse datagrid row by row and make a comma separated file. then use Bulk insert or bcp for inserting data to db.
Another Solution
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();
这篇关于如何将gridview行添加到datatable?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!