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:
- Dll Ionic.Zip.dll
- The following namespace:
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Web.UI.WebControls;
- 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 :
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <title>Download in zip format</title>
- </head>
- <body>
- <form id="form1" runat="server">
- <div>
- <br />
- <asp:Label ID="lbl_txt" runat="server" Font-Bold="true" ForeColor="Red" />
- </div>
- <asp:GridView ID="gridview1" CellPadding="5" runat="server" AutoGenerateColumns="false">
- <Columns>
- <asp:TemplateField>
- <ItemTemplate>
- <asp:CheckBox ID="chk_Select" runat="server" />
- </ItemTemplate>
- </asp:TemplateField>
- <asp:BoundField DataField="Text" HeaderText="FileName" />
- </Columns>
- <HeaderStyle BackColor="white" Font-Bold="true" ForeColor="White" />
- </asp:GridView>
- <asp:Button ID="btn_Download" Text="Download " runat="server" OnClick="btnDownload_Click" />
- </form>
- </body>
- </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:- protected void BindGridview()
- {
- string[] files_Path = Directory.GetFiles(Server.MapPath("~/files/"));
- List<ListItem> files = new List<ListItem>();
- foreach (string path in files_Path)
- {
- files.Add(new ListItem(Path.GetFileName(path)));
- }
- gridview1.DataSource = files;
- gridview1.DataBind();
- }
- Call this function on pageload :
- if (!IsPostBack)
- {
- BindGridview();
- }
- }
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:
- using (ZipFile zip = new ZipFile())
- {
- foreach (GridViewRow gr in gridview1.Rows)
- {
- CheckBox chk = (CheckBox)gr.FindControl("chkSelect");
- if (chk.Checked)
- {
- string fileName = gr.Cells[1].Text;
- string filePath = Server.MapPath("~/files/" + fileName);
- zip.AddFile(filePath, "files");
- }
- }
- Response.Clear();
- Response.AddHeader("Content-Disposition", "attachment; filename=DownloadedFile.zip");
- Response.ContentType = "application/zip";
- zip.Save(Response.OutputStream);
- Response.End();
- }
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.