复制并省略中继器上的复选框
本文关键字:复选框 中继器 复制 | 更新日期: 2023-09-27 17:57:41
我有一个中继器,它有一些复选框控件。我想复制中继器中的所有项目,除了复选框,我将在它们的位置复制复选框的值。目的是我想将中继器中的所有信息导出为xls格式的excel文档。然而,这不允许我有复选框,因此我想删除它们。
请问我该怎么做?
我试过:
for (int j =0; j<repeater1.Items.Count; j++)
{
RepeaterItem repItem = repeater1.Items[j];
foreach (Control c in repItem.Controls)
{
if (!(c is CheckBox))
{
Control c2 = c;
repeater2.Items[j].Controls.Add(c2);
}
}
}
但它给了我一个错误:
集合已修改;枚举操作可能无法执行。
您在注释中写道,您希望导出带有复选框的中继器。不允许将复选框导出到excel,这就是为什么要在导出前删除复选框。
这里有一种方法可以做到这一点。。。只需将其添加到您的页面中,然后尝试。。。。
public override void VerifyRenderingInServerForm(Control control)
{
}
或者,如果您导出DataTable
而不是repeater
,该怎么办?
如果以上内容不起作用,并且您想要迭代然后导出,那么下面是代码。。。
protected void btnExport_Click(object sender, EventArgs e)
{
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
string attachment = "attachment; filename=FileName" + DateTime.Now.ToString() + ".xls";
Response.ClearContent();
Response.AddHeader("content-disposition", attachment);
Response.ContentType = "application/ms-excel";
foreach (RepeaterItem item in Repeater1.Items)
{
CheckBox chk= item.FindControl("CheckBox") as CheckBox;
chk.Visible = false;
}
Repeater1.RenderControl(htw);
Response.Write(sw.ToString());
Response.End();
}