在Repeater上复制并遗漏复选框

时间:2011-05-25 08:19:51

标签: c# .net asp.net repeater

我有一个转发器,它有一些控件是复选框。我想复制转发器中除复选框之外的所有项目,在这里我将复制teh复选框的值。目的是我想将转发器中的所有信息以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);
        }
    }
}

但它给了我这个错误:

  

收藏被修改;枚举操作可能无法执行。

1 个答案:

答案 0 :(得分:0)

您在评论中写道,您要导出具有复选框的转发器。不允许将复选框导出到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();
}