如何将gridview行添加到datatable? [英] How to add gridview rows to a datatable?

查看:263
本文介绍了如何将gridview行添加到datatable?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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



我发现这个 http://www.codeproject .com / KB / aspnet / GridView_To_DataTable.aspx



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



我要将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 datatable Grid 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?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆