Introduction

In this article I explain how to bind files in a GridView and how to download selected files in zip format.

Requirements

The requirements are:

  1. Dll Ionic.Zip.dll
  2. The following namespace:
    1. using System;
    2. using System.Collections.Generic;
    3. using System.IO;
    4. using System.Web.UI.WebControls;
    5. using Ionic.Zip;

Add the Ionic.Zip.dll to your bin folder of the application then add the namespaces above.

Code .aspx :

I have some files in my application, file1.txt and file2.doc. I bind these files in the GridView. But before binding to the GridView I design my page. Use the following code to understand what I have done :

  1. <html xmlns="http://www.w3.org/1999/xhtml">
  2. <head>
  3. <title>Download in zip format</title>
  4. </head>
  5. <body>
  6. <form id="form1" runat="server">
  7. <div>
  8. <br />
  9. <asp:Label ID="lbl_txt" runat="server" Font-Bold="true" ForeColor="Red" />
  10. </div>
  11. <asp:GridView ID="gridview1" CellPadding="5" runat="server" AutoGenerateColumns="false">
  12. <Columns>
  13. <asp:TemplateField>
  14. <ItemTemplate>
  15. <asp:CheckBox ID="chk_Select" runat="server" />
  16. </ItemTemplate>
  17. </asp:TemplateField>
  18. <asp:BoundField DataField="Text" HeaderText="FileName" />
  19. </Columns>
  20. <HeaderStyle BackColor="white" Font-Bold="true" ForeColor="White" />
  21. </asp:GridView>
  22. <asp:Button ID="btn_Download" Text="Download " runat="server" OnClick="btnDownload_Click" />
  23. </form>
  24. </body>
  25. </html>
Here you can see I have taken a GridView with a checkbox and a button with the text "Download".

Code.cs :

Bind files in GridView:
  1. protected void BindGridview()
  2. {
  3. string[] files_Path = Directory.GetFiles(Server.MapPath("~/files/"));
  4. List<ListItem> files = new List<ListItem>();
  5. foreach (string path in files_Path)
  6. {
  7. files.Add(new ListItem(Path.GetFileName(path)));
  8. }
  9. gridview1.DataSource = files;
  10. gridview1.DataBind();
  11. }
  12. Call this function on pageload :
  13. if (!IsPostBack)
  14. {
  15. BindGridview();
  16. }
  17. }

Now, when you save all these and view the page in a browser you will see all files in the GridView.

Now write the following code for the Download button click:

  1. using (ZipFile zip = new ZipFile())
  2. {
  3. foreach (GridViewRow gr in gridview1.Rows)
  4. {
  5. CheckBox chk = (CheckBox)gr.FindControl("chkSelect");
  6. if (chk.Checked)
  7. {
  8. string fileName = gr.Cells[1].Text;
  9. string filePath = Server.MapPath("~/files/" + fileName);
  10. zip.AddFile(filePath, "files");
  11. }
  12. }
  13. Response.Clear();
  14. Response.AddHeader("Content-Disposition", "attachment; filename=DownloadedFile.zip");
  15. Response.ContentType = "application/zip";
  16. zip.Save(Response.OutputStream);
  17. Response.End();
  18. }
When you write this code you are done with the code to download selected files in zipformat. Just save all again and view the page in the browser; it will work fine.