复制并省略中继器上的复选框

本文关键字:复选框 中继器 复制 | 更新日期: 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();
}