【问题标题】:How to add gridview rows to a datatable?如何将gridview行添加到数据表?
【发布时间】:2010-02-25 06:26:23
【问题描述】:

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

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

但我希望将 gridview 的所有列添加到数据表的数据行中 Grid 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();

【问题讨论】:

  • 您最初是如何获得数据的?来自数据表?
  • @madatanic 但我只会得到标签数据...

标签: c# gridview datatable sqlbulkcopy


【解决方案1】:

您可以逐行遍历数据网格并制作一个逗号分隔的文件。然后使用 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();

【讨论】:

  • @masoud foreach 语句无法对“System.Web.UI.WebControls.GridView”类型的变量进行操作,因为“System.Web.UI.WebControls.GridView”不包含“GetEnumerator”的公共定义'
  • @masoud 我找到了foreach (GridViewRow row in yourGridView.Rows)
  • @masoud cannot find column 0... 看看我的 gridview 它有标签和文本框...
  • 你必须这样做:dr[i] = ((TextBox)(row.FindControl("textBoxID"))).Text;
  • 您必须了解网格的结构才能从中获取数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多