如何在DataSet中添加DataTable值使用ASP.NET C#Webform中的每个foreach循环

时间:2017-05-15 09:56:03

标签: c# asp.net excel gridview webforms

如何在DataSet中添加DataTable值使用ASP.NET C#Webform中的每个foreach循环,实际上我有一个gridview,并且在gridview中选中复选框数据应该只下载到xl。

我有以下代码导出到xl按钮。

     foreach (GridViewRow row in gv_TotalAllReg.Rows)
        {
            if (row.RowType == DataControlRowType.DataRow)
            {
                bool isChecked = ((CheckBox)row.FindControl("chk_box")).Checked;
                if (isChecked == true)
                {
                    //var ds = new DataSet();
                    //var dt = new DataTable("RegistrationDetails");

                    int index = row.RowIndex;

                    bo.Para1 = "4";
                    bo.Para2 = "Innovation";

                    bo.Para3 = gv_TotalAllReg.DataKeys[index].Values[0].ToString();//Id



                }
            }
        }
        dt = bl.Admin_GetInnovationbaseonParaType(bo);
        if (gv_TotalAllReg.Rows.Count > 0)
        {
            dt.TableName = "RegistrationDetails";
            ds.Tables.Add(dt);
            ExcelHelper.ToExcel(ds, "ApplicationDetails.xls", Page.Response);
            btnExport.Visible = true;


        }

实际上,基于gridview中选中的复选框,数据未在xl工作表中显示,只有最后选择的数据显示在xl工作表中。

我没有得到逻辑ds.Tables.Add(dt);来在ds每个foreach循环中添加dt值。我需要将所有选定的数据导入xl表。为什么最后选择的数据只出现在xl表中。

2 个答案:

答案 0 :(得分:0)

您可以将整个数据表添加到数据集,而不是将每行数据表添加到数据集

数据集可以包含数据表的集合,因此您可以将多个数据表添加到数据集中。

DataTable tbl = new Datatable();//or your method that returns datatable.
DataSet ds = new DataSet(); //new dataset object
ds.Tables.Add(tbl); //add datatable object in dataset object.

更新

 DataTable dt= new DataTable();
//Columns that should present in datatable
dt.Columns.Add("SN");
dt.Columns.Add("MyField");
int sn = 1;
foreach (GridViewRow row in gv_TotalAllReg.Rows)
{
    if (row.RowType == DataControlRowType.DataRow)
    {
        bool isChecked = ((CheckBox)row.FindControl("chk_box")).Checked;
        if (isChecked == true)
        {
            DataRow row = dt.NewRow();
            //Add necessary columns to row by index.
            row[0] = sn;
            row[1] = gv_TotalAllReg.DataKeys[index].Values[0].ToString();   
            dt.Rows.Add(row); 
            sn++;
        }
    }
}
if (tbl .Rows.Count > 0)
{
ds.Tables.Add(dt);
ExcelHelper.ToExcel(ds, "ApplicationDetails.xls", Page.Response);
btnExport.Visible = true;
}

答案 1 :(得分:0)

我认为你可以在proxyAddresses循环之前创建DataTable,并在其中添加行。以下是添加和检索foreach的数据的示例:

DataTable

检索数据:

DataTable dt = bl.Admin_GetInnovationbaseonParaType(bo);
if (gv_TotalAllReg.Rows.Count > 0)
{
     dt.TableName = "RegistrationDetails";
     ds.Tables.Add(dt);               

     foreach (GridViewRow row in gv_TotalAllReg.Rows)
     {
         if (row.RowType == DataControlRowType.DataRow)
         {
             bool isChecked = ((CheckBox)row.FindControl("chk_box")).Checked;
             if (isChecked == true)
             {                    
                // inserting data row
                dr = dt.NewRow();
                dr.SetField("Column_Name", "your_Value");
                dt.Rows.Add(dr);

                int index = row.RowIndex;

                bo.Para1 = "4";
                bo.Para2 = "Innovation";

                bo.Para3 = gv_TotalAllReg.DataKeys[index].Values[0].ToString();//Id
             }
         }
    }

    ExcelHelper.ToExcel(ds, "ApplicationDetails.xls", Page.Response);
    btnExport.Visible = true;
}