【问题标题】:Repeater to xls exports my repeater buttons too into the xls转发器到 xls 也将我的转发器按钮导出到 xls
【发布时间】:2013-08-09 08:50:56
【问题描述】:

我已将中继器连接到我的数据库,我想将其数据导出到 xls 文件中。 我能够做到这一点,除了因为我的 repater 包含一个控制按钮来操纵行(删除)我的 xls 是用这个按钮呈现的。

<asp:Repeater ID="Repeater1" runat="server"   EnableTheming="true"onitemcommand="Repeater1_ItemCommand" >
    <HeaderTemplate>
            <table class="datatable fullwidthpercent"> 
               <tr>
                   <td>ID</td>                     
                   <td> Nom</td>                             
                   <td>Prénom</td>                              
                   <td>Email</td>                      
                   <td>Adresse</td>
                   <td>Ville</td>
                   <td>Tél</td>
               </tr>

    </HeaderTemplate>
        <ItemTemplate>

               <tr>
                   <td><%# Eval("id") %></td>                           
                   <td><%# Eval("nom") %></td>                         
                   <td><%# Eval("prenom") %></td>                         
                   <td><%# Eval("email") %></td>
                   <td><%# Eval("adresse") %></td>
                   <td><%# Eval("ville") %></td>
                   <td><%# Eval("tel") %></td>
                   <td><asp:Button ID="Btn1" runat="server" CommandArgument= ' <%# Eval("id") %> ' Text="Eliminer" OnClick = "buttonEliminer_click" ></asp:Button></td>                   
               </tr>                  

        </ItemTemplate>
        <SeparatorTemplate>
        <tr>
        <td colspan="6"><hr /></td>
        </tr>
        </SeparatorTemplate>
        <FooterTemplate>
           </table>
        </FooterTemplate>
</asp:Repeater>
</div>

代码背后:

  protected void ButtonExporter_Click(object sender, EventArgs e)
    {

        Response.Clear();
        Response.Buffer = true;
        Response.AddHeader("content-disposition", "attachment;filename=Gagnants.xls");
        Response.Charset = "";
        Response.ContentType = "application/vnd.ms-excel";

        System.IO.StringWriter stringWrite = new System.IO.StringWriter();
        System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
        Repeater1.RenderControl(htmlWrite);
        Response.Write("<table>");
        Response.Write(stringWrite.ToString());
        Response.Write("</table>");
        Response.End();

    }

在渲染带有内部控制的中继器时克服表单应答器问题的覆盖方法:

public override void VerifyRenderingInServerForm(Control control)
    {
        /* Confirms that an HtmlForm control is rendered for the specified ASP.NET
           server control at run time. */
    }

我在输出 xls 得到这个:

【问题讨论】:

    标签: asp.net repeater export-to-excel xls export-to-csv


    【解决方案1】:

    基本上,您需要实现将按钮 (Btn1) 的可见性设置为 false 的代码。当服务器控件的可见性设置为 false 时,它​​不会呈现在页面上。

    我会建议以下代码更改:

    首先,创建一个页面级变量来确定您要呈现的内容。您想将此设置为默认为true,因为这是您的默认状态(渲染到屏幕)

    private bool _IsRenderForScreen = true;
    public property bool IsRenderForScreen {
       get {
          return this._IsRenderForScreen;
       }
       set {
          this._IsRenderForScreen = value;
       }
    }
    

    然后,在ButtonExporter_Click 方法中,将此变量设置为false:

    this.IsRenderForScreen = false;
    

    然后钩入转发器的ItemDataBound事件:

    <asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound" ...
    

    然后添加以下方法来处理事件:

    public void Repeater1_ItemDataBound(Object sender, RepeaterItemEventArgs e)
    {
        if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) {
            if(!this.IsRenderForScreen) {
                ((Button)e.Item.FindControl("Btn1")).Visible = false;
            }
        }
    }
    

    HTH。如果有什么不清楚的地方请告诉我

    【讨论】:

    • 好的,我确实理解了这个想法,不幸的是我仍然有同样的问题,按钮被渲染。我认为 HtmlRendering 方法会渲染页面中的所有内容,即使它是不可见的。我仍在考虑一个准确的解决方案,但直到现在还没有任何线索。谢谢你的回答,我真的很欣赏你的方法并从中学到了很多!
    • 先生,我告诉你你是最棒的!当我在 xls_exporting 按钮操作 [ButtonExporter] 中刷新中继器绑定时,您的解决方案效果很好(当然,我之前将该属性设置为 false)。这样每次我想导出时,我都会渲染一个没有按钮的中继器!再次感谢您!
    猜你喜欢
    • 2012-04-10
    • 2010-09-24
    • 1970-01-01
    • 2011-03-04
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    相关资源
    最近更新 更多