如何使用C#ASP.NET论坛创建对象集合并在每次循环迭代中添加到集合中。实际上是基于para`ID'在xl中获取用户信息。但是当我要下载导出到xl时,只有第一行记录显示在xl中。但是其他被选中的并没有进入xl,我在foreach循环中感到困惑。我想下载基于ID条件匹配并在gridview中选择的所有数据。我的收藏概念非常薄弱。我想基于ID导出到gridview所选行的xl。已经工作但只有第一个记录才进入数据表。
下面是我导出到xl按钮的代码:
DataTable dt = new DataTable();
DataSet ds = new DataSet();
foreach (GridViewRow row1 in gv_TotalAllReg.Rows)
{
if (row1.RowType == DataControlRowType.DataRow)
{
bool isChecked = ((CheckBox)row1.FindControl("chk_box")).Checked;
if (isChecked == true)
{
int index = row1.RowIndex;
bo.Para1 = "4";
bo.Para2 = "Innovation";
bo.Para3 = gv_TotalAllReg.DataKeys[index].Values[0].ToString();//Id
dt = bl.Admin_GetInnovationbaseonParaType(bo);
DataRow row = dt.NewRow();
dt.Rows.Add(row);
ds.Tables.Add(dt);
}
}
}
if (gv_TotalAllReg.Rows.Count > 0)
{
ExcelHelper.ToExcel(ds, "ApplicationDetails.xls", Page.Response);
btnExport.Visible = true;
}
答案 0 :(得分:1)
听起来像您导出的Excel导出功能只导出DataSet中的第一个DataTable。
也许尝试这样的事情:
DataTable dt = null;
DataSet ds = new DataSet();
foreach (GridViewRow row1 in gv_TotalAllReg.Rows)
{
if (row1.RowType == DataControlRowType.DataRow)
{
bool isChecked = ((CheckBox)row1.FindControl("chk_box")).Checked;
if (isChecked == true)
{
int index = row1.RowIndex;
bo.Para1 = "4";
bo.Para2 = "Innovation";
bo.Para3 = gv_TotalAllReg.DataKeys[index].Values[0].ToString();//Id
var tempdt = bl.Admin_GetInnovationbaseonParaType(bo);
if (dt == null)
{
dt = tempdt.Clone();
}
foreach(DataRow temprow in tempdt.Rows)
{
dt.Rows.Add(temprow.ItemArray);
}
}
}
}
if (dt == null)
{
dt = new DataTable();
}
ds.Tables.Add(dt);
if (gv_TotalAllReg.Rows.Count > 0)
{
ExcelHelper.ToExcel(ds, "ApplicationDetails.xls", Page.Response);
btnExport.Visible = true;
}