简体   繁体   English

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

[英]How to Add DataTable value in DataSet Using every foreach loop in ASP.NET C# Webform

How to Add DataTable value in DataSet Using every foreach loop in ASP.NET C# Webform, Actually I have one gridview and in gridview selected checkbox data should only download to xl. 如何在DataSet中添加DataTable值使用ASP.NET C#Webform中的每个foreach循环,实际上我只有一个gridview,并且在gridview中选中的复选框数据应该仅下载到xl。

I have below code for export to xl button. 我有下面的代码导出到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;


        }

Actually base on selected checkbox in gridview that data is not showing in xl sheet, only last selected data is showing in xl sheet. 实际上基于gridview中的选定复选框,即数据未显示在xl工作表中,只有最后选择的数据显示在xl工作表中。

I am not getting logic ds.Tables.Add(dt); 我没有逻辑ds.Tables.Add(dt); to add dt values in ds every foreach loop. 在每个foreach循环中在ds中添加dt值。 I need all selected data into xl sheet. 我需要将所有选择的数据放入xl工作表中。 Why last select data only coming in xl sheet. 为什么最后选择的数据仅出现在xl表中。

Instead of adding each row of datatable to dataset you can add entire datatable to dataset . 而不是添加的DataTable的每一行数据集 ,你可以整个数据表添加到数据集

Dataset can hold collection of datatables so you can add multiple datatable to dataset. 数据集可以保存数据表的收藏,您可以添加多个数据表到数据集。

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.

Update 更新

 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;
}

I think you can crete DataTable before foreach loop, and add rows inside it. 我认为您可以在foreach循环之前创建DataTable ,并在其中添加行。 Here is an example with adding and retrieving data from DataTable : 这是一个从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;
}

Retrieving data: 检索数据:

string[] values = dt.AsEnumerable().Select(r => r.Field<string>("Value")).ToArray();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM