(Export các cột được chọn trong Asp.net sử dụng thư viện iTextSharp) - Bài viết dưới đây, thủ thuật tin học sẽ giới thiệu với các bạn cách sử dụng thư viện iTextSharp để Export danh sách dữ liệu (Datatable) cho phép lựa chọn cột dữ liệu ra file PDF. Chương trình sẽ tự động lấy toàn bộ các trường dữ liệu có trong 1 bảng dữ liệu, người dùng có thể chọn hoặc bỏ chọn những trường không cần thiết để Export ra file PDF.


Nghe những bài hát đỉnh nhất về Thấy cô giáo - Nghe trên Youtube



Code Example C#, Code Example VB.NET
Code Example C#, Code Example VB.NET



- B1: Download CSDL Northwind  tại đây và thực hiện công việc Restore Data.

- B2: Tạo Project trong Microsoft Visual Studio 2010

Trong Visual Studio tạo 1 Class có tên: Utility và nhập đoạn Code phía dưới cho Class này.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Data.SqlClient;
using System.Data;
using System.Configuration;
using System.IO;
using System.Text;
using System.Web;

namespace ExportSelectedColumnsUsingItextsharp
{
    public class SqlDataProvider
    {
        #region"Membres Prives"

        private string_connectionString;

        #endregion

        #region"Constructeurs"

        public SqlDataProvider()
        {
            try
            {
                _connectionString = ConfigurationManager.ConnectionStrings["SiteSqlServer"].ConnectionString;
            }
            catch
            {
            }
        }

        #endregion

        #region"Proprietes"

        public stringConnectionString
        {
            get { return_connectionString; }
        }

        #endregion

        #region"Functions"

        public DataTableFillTable(string sql)
        {
            try
            {
                DataTable tb = new DataTable();
                SqlDataAdapter adap = new SqlDataAdapter(sql, _connectionString);
                adap.Fill(tb);
                return tb;
            }
            catch
            {
                return null;
            }
        }

        #endregion
    }

    public class MyEventArgs : EventArgs
    {

        private string Name;

        private string MyId;
        public stringSelectedName
        {
            get { return Name; }
            set { Name = value; }
        }

        public string Id
        {
            get { return MyId; }
            set { MyId = value; }
        }
    }

    public class Constants
    {
        public const string DEFAULT_COLOR_COMPANYNAME = "#007dc2";
        public const string DEFAULT_BACKGROUNDCOLOR_HEADERROW = "#99cd00";
        public const string DEFAULT_COLOR_HEADERROW = "#ffffff";
        public const string DEFAULT_BORDERCOLOR_TABLE = "#808080";
        public const string DEFAULT_BACKGROUNDCOLOR_ROW = "#edf5ff";
    }
}

Chú ý: Thuộc tính SiteSqlServer chính là chuỗi Connect với SQL Server trong file Web.Config

B3: Download  thư viện iTextSharp tại đây

B4: References  itextsharp.dll trong thư mục vừa giải nén vào Project

B5: Tạo thư mục Fonts,  Download Font ARIALUNI.TTF tại đây và  copy file này vào thư mục vừa tạo.

B6: Download  thư viện AjaxControlToolkit tại địa chỉ: http://ajaxcontroltoolkit.codeplex.com/downloads/get/116534

B7: Giải nén AjaxControlToolkit.Binary.NET4, và References Ajaxcontroltoolkit.dll trong thư mục vừa giải nén vào Project.

B8: Tạo thư mục UserControls, thêm file Popup_SelectedColumns.ascx và nhập mã HTML
<%@ ControlLanguage="C#"AutoEventWireup="true"CodeBehind="Popup_SelectedColumns.ascx.cs"Inherits="ExportSelectedColumnsUsingItextsharp.UserControls.Popup_SelectedColumns"%>
<%@ RegisterTagPrefix="cc1"Assembly="AjaxControlToolkit"Namespace="AjaxControlToolkit"%>
<script language="javascript" type="text/javascript">
    function CheckBoxListSelect(cbControl, state) {
        var chkBoxList = document.getElementById(cbControl);
        var chkBoxCount = chkBoxList.getElementsByTagName("input");
        for (var i = 0; i < chkBoxCount.length; i++) {
            chkBoxCount[i].checked = state;
        }
        return false;
    }
</script>

<asp:Panel ID="pnlpopup" runat="server" style="display:none">
    <asp:UpdatePanel ID="updatePanelPopup"runat="server"UpdateMode="Conditional">
        <ContentTemplate>
            <asp:Button id="cmdShowPopup"runat="server"style="display:none" />
            <cc1:ModalPopupExtenderID="ModalPopupExtender_Popup"runat="server"TargetControlID="cmdShowPopup"X="750"Y="150"
                PopupControlID="pnlpopup"CancelControlID="cmdCancel"BackgroundCssClass="ModalPopupBG"Drag="True"/>
                <divclass="modal"style="width:450px;">
                    <divclass="modal-dialog">
                        <div class="modal-content">
                            <div class="modal-header">
                                <button type="button"id="cmdClose"runat="server"causesvalidation="false"onserverclick="cmdClose_ServerClick"class="close"data-dismiss="modal"aria-hidden="true">x</button>
                                <h4 class="modal-title">
                                    <asp:label id="lblHeader"runat="server"Text="Export only selected columns to PDF"></asp:label>
                                </h4>
                              </div>
                              <div class="modal-body">
                                   <table width="100%"cellpadding="0"cellspacing="0">
                                       <tr>
                                            <td style="padding-left:10px;padding-bottom:5px;">
                                                 <a id="A1" href="#" onclick="javascript: CheckBoxListSelect ('<%= chkExport.ClientID %>',true)">
                                                       <asp:label id="plCheckAll"runat="server"CssClass="NormalBold"text="CheckAll"></asp:label>
                                                  </a>|
                                                  <a id="A2" href="#" onclick="javascript: CheckBoxListSelect ('<%= chkExport.ClientID %>',false)">
                                                       <asp:label id="plUnCheckAll"runat="server"CssClass="NormalBold"text="UnCheckAll"></asp:label>
                                                  </a>
                                            </td>
                                       </tr>
                                       <tr>
                                           <td>
                                               <asp:CheckBoxList ID="chkExport"CellPadding="5"CellSpacing="10"RepeatColumns="2"runat="server">
                                               </asp:CheckBoxList>
                                           </td>
                                       </tr>
                                   </table>
                              </div>
                              <div class="modal-footer">
                                   <div class="btn-group">
                                        <asp:LinkButton id="cmdOK" runat="server"OnClick="cmdOK_Click"CssClass="btn btn-small" CausesValidation="false">
                                            <i class="icon-exportpdf"></i>&nbsp;&nbsp;<asp:label id="lblExport" runat="server" Text="Export"></asp:label>
                                        </asp:LinkButton>&nbsp;
                                         <asp:LinkButton id="cmdCancel"runat="server"OnClick="cmdCancel_Click"CssClass="btn btn-small" Causesvalidation="false">
                                            <i class="icon-close"></i>&nbsp;&nbsp;<asp:label id="lblClose" runat="server" Text="Close"></asp:label>
                                        </asp:LinkButton>
                                   </div>
                              </div>
                        </div>
                    </div>
                </div>
        </ContentTemplate>
        <Triggers>
            <asp:PostBackTrigger ControlID="cmdOK"/>
        </Triggers>
    </asp:UpdatePanel>   
</asp:Panel>   
B13: Nhập Code phía dưới cho file Popup_SelectedColumns.ascx
using Microsoft.VisualBasic;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;

namespace ExportSelectedColumnsUsingItextsharp.UserControls
{
    partial class Popup_SelectedColumns : System.Web.UI.UserControl
    {

        #region"Private Members"

        private int _ItemID;
        private string_ItemName;

        #endregion

        #region"Event Click"

        public delegate void MyEventHandler(object sender, MyEventArgse);
        public event MyEventHandler OnSelectedRow;

        #endregion

        #region"Private Methods"

        private IEnumerable<string> GetColumnNames(stringTableName)
        {
            dynamic ColumnNames = newList<string>();
            SqlDataProvider objSQL = newSqlDataProvider();
            DataTable objBind = objSQL.FillTable("Select COLUMN_NAME, DATA_TYPE FROM information_schema.columns where TABLE_NAME ='" + TableName + "'");

            if (objBind != null)
            {
                foreach (DataRowrow in objBind.Rows)
                {
                    ColumnNames.Add(row.Field<string>("COLUMN_NAME"));
                }
            }
            return ColumnNames;
        }

        #endregion

        #region"GetColumnNames"

        private voidBindColumn()
        {
            string TableName = "Products";
            dynamic ColumnNames = GetColumnNames(TableName);
            int i = 0;
            chkExport.Items.Clear();
            foreach (stringcolumnName in ColumnNames)
            {
                chkExport.Items.Add(newSystem.Web.UI.WebControls.ListItem(columnName, columnName));
                chkExport.Items[i].Selected = true;
                i = i + 1;
            }
        }

        #endregion

        #region"Pulbic Methods"

        public voidShowPopup(int ItemID)
        {
            BindColumn();
            updatePanelPopup.Update();
            ModalPopupExtender_Popup.Show();
        }

        public voidHidePopup()
        {
            ModalPopupExtender_Popup.Hide();
        }

        #endregion

        #region"Properties"

        public int ItemID
        {
            get { return _ItemID; }
            set { _ItemID = value; }
        }

        public stringItemName
        {
            get { return_ItemName; }
            set { _ItemName = value; }
        }

        #endregion

        #region"Event Handles"

        protected voidcmdOK_Click(object sender, System.EventArgs e)
        {
            MyEventArgs MyArgs = newMyEventArgs();
            string sListExport = "";
            int i = 0;
            int iCount = 0;

            for (i = 0; i <= chkExport.Items.Count - 1; i++)
            {
                if (chkExport.Items[i].Selected)
                {
                    sListExport += chkExport.Items[i].Value + ",";
                    iCount = iCount + 1;
                }
            }

            if(sListExport.Length > 0 & sListExport.EndsWith(","))
            {
                sListExport = sListExport.Remove(sListExport.Length - 1, 1);
            }

            ModalPopupExtender_Popup.Hide();

            MyArgs.Id = sListExport;
            MyArgs.SelectedName = iCount.ToString();
            if (OnSelectedRow != null)
            {
                OnSelectedRow(this, MyArgs);
            }
        }

        protected voidcmdCancel_Click(object sender, System.EventArgs e)
        {
            ModalPopupExtender_Popup.Hide();
        }

        protected voidcmdClose_ServerClick(object sender, System.EventArgs e)
        {
            ModalPopupExtender_Popup.Hide();
        }

        #endregion
    }
}

B11: Mở file Default.aspx dưới dạng HTML và  nhập mã HTML
<%@ PageTitle="Export Selected Columns Using itextsharp in ASP.Net" Language="C#"MasterPageFile="~/Site.master"AutoEventWireup="true"CodeBehind="Default.aspx.cs"Inherits="ExportSelectedColumnsUsingItextsharp._Default"%>
<%@ RegisterTagPrefix="ModalPopup"TagName="Export"Src="~/UserControls/Popup_SelectedColumns.ascx"%>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <asp:ScriptManager ID="ScriptManager1"runat="server">
    </asp:ScriptManager>
    <h3>
        Export Selected Columns Using itextsharp in Datalist ASP.Net
    </h3>
    <ModalPopup:Export ID="ucSelectedColumns"runat="server"/>
    <asp:UpdatePanel ID="updatePanel"runat="server"UpdateMode="Conditional">
        <ContentTemplate>
            <table cellpadding="2" cellspacing="3" width="100%">
                <tr>
                    <td>
                        <div class="btn-group">
                            <asp:LinkButton id="cmdExport"runat="server"OnClick="cmdExport_Click"CssClass="btn btn-small" Causesvalidation="false">
                                <i class="icon-exportpdf"></i>&nbsp;&nbsp;<asp:label id="lblExport" runat="server" Text="ExportToPDF"></asp:label>
                            </asp:LinkButton>
                        </div>
                    </td>
                </tr>
                <trid="trMessage"runat="server"visible="false">
                    <td>
                        <asp:Label ID="lblMessage" runat="server" Text="No Data"></asp:Label>
                    </td>
                </tr>
                <tr>
                    <td>
                        <asp:DataList ID="dlObject" runat="server" DataKeyField="ProductID" Width="100%">
                            <HeaderStyle CssClass="GridStyle_HeaderStyle"/>
                            <ItemStyle CssClass="GridStyle_RowStyle"/>
                            <HeaderTemplate>
                            <table cellpadding="0"cellspacing="0"width="100%">
                                <tr>
                                    <th align="center"width="20px">
                                        <asp:CheckBox ID="chkAll" runat="server"/>
                                    </th>
                                    <th colspan="5">
                                        <table id="tblProduct"runat="server"cellpadding="0"cellspacing="0"width="100%">
                                            <tr>
                                                <thalign="center"width="200">ProductName</th>
                                                <thalign="center"width="100">QuantityPerUnit</th>
                                                <thalign="center"width="80">UnitPrice</th>
                                                <thalign="center"width="80">UnitsInStock</th>
                                                <thalign="center"width="80">UnitsOnOrder</th>       
                                            </tr>
                                        </table>
                                    </th>             
                                </tr>
                            </HeaderTemplate>
                            <ItemTemplate>
                                <tr>
                                    <td colspan="6">
                                        <table id="tblInfo"runat="server"cellpadding="0"cellspacing="0"width="100%">
                                            <tr>
                                                <tdalign="center"width="20px">
                                                    <asp:CheckBox ID="chkSelect"runat="server"/>
                                                </td>
                                                <tdalign="left"width="200"><%# Eval("ProductName") %></td>
                                                <tdalign="left"width="100"><%# Eval("QuantityPerUnit") %></td>
                                                <tdalign="right"width="80"><%# Eval("UnitPrice") %></td>
                                                <td align="right" width="80"><%# Eval("UnitsInStock") %></td>
                                                <tdalign="right"width="80"><%# Eval("UnitsOnOrder") %></td>       
                                            </tr>
                                        </table>
                                    </td>             
                                </tr>
                            </ItemTemplate>
                            <FooterTemplate>
                            </table>
                            </FooterTemplate>
                        </asp:DataList>
                    </td>
                </tr>
            </table>
        </ContentTemplate>
        <Triggers>
            <asp:PostBackTrigger ControlID="cmdExport"/>
        </Triggers>
    </asp:UpdatePanel>
</asp:Content>
B12: Viết Code cho file Default.aspx
//Visit http://www.laptrinhdotnet.com for more ASP.NET Tutorials
using Microsoft.VisualBasic;
using System;
using System.Data;
using System.IO;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web;
using iTextSharp.text.html;
using iTextSharp.text;
using iTextSharp.text.html.simpleparser;
using iTextSharp.text.pdf;

namespace ExportSelectedColumnsUsingItextsharp
{
    public partial class _Default : System.Web.UI.Page
    {
        #region"Export PDF"

        private voidMySelExport_OnSelectedRow(object sender, ExportSelectedColumnsUsingItextsharp.MyEventArgse)
        {
            string sExportList = "";
            int iCount = 0;
            var _with1 = e;
            if (!string.IsNullOrEmpty(e.Id))
            {
                sExportList = e.Id;
                iCount =Convert.ToInt32(e.SelectedName);
                if (!string.IsNullOrEmpty(sExportList))
                {
                    ExportToPDF("List-Product.pdf", sExportList, iCount);
                }
            }
        }

        private voidExportToPDF(string FileName, string ExportList, intiCount)
        {
            Document document = newDocument(PageSize.A4, 10f, 10f, 5f, 0f);
            System.IO.MemoryStream msReport = new System.IO.MemoryStream();
            string FilePath = "";

            FilePath = Server.MapPath("Fonts\\ARIALUNI.TTF");
            string fontpath = FilePath;
            BaseFont bf = BaseFont.CreateFont(fontpath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
            Font fontCompany = newFont(bf, 13, Font.BOLD, new Color(System.Drawing.ColorTranslator.FromHtml(Constants.DEFAULT_COLOR_COMPANYNAME)));
            Font fontHeader = newFont(bf, 12, Font.BOLD, Color.BLUE);
            Font fontSubHeader = newFont(bf, 10);
            Font fontTitle = newFont(bf, 11, Font.BOLD, Color.BLACK);
            Font fontContent = newFont(bf, 11, Font.NORMAL, Color.BLACK);
            Font fontTableHeader = newFont(bf, 10, Font.BOLD, new Color(System.Drawing.ColorTranslator.FromHtml(Constants.DEFAULT_COLOR_HEADERROW)));

            try
            {
                PdfWriter writer = PdfWriter.GetInstance(document, msReport);
                document.AddAuthor("Thu thuat lap trinh");
                document.AddSubject("Export to PDF");

                document.Open();

                Chunk cBreak = new Chunk(Environment.NewLine);
                Phrase pBreak = new Phrase();
                Paragraph paBreak = new Paragraph();

                //=================Start Header =====================
                //CompnayName
                string sText = "THỦ THUẬT LẬP TRÌNH";
                Chunk beginning = new Chunk(sText, fontCompany);
                Phrase p1 = newPhrase(beginning);
                Paragraph pCompanyName = new Paragraph();
                pCompanyName.IndentationLeft = 30;
                pCompanyName.Add(p1);
                document.Add(pCompanyName);

                //Website
                string sWebsite = "Website: http://www.laptrinhdotnet.com";
                sText = "";
                if (!string.IsNullOrEmpty(sWebsite))
                {
                    sText = sWebsite;
                }

                if (!string.IsNullOrEmpty(sText))
                {
                    sText = sText.Replace(Environment.NewLine, string.Empty).Replace("  ", string.Empty);
                    beginning = new Chunk(sText, fontSubHeader);
                    p1 = new Phrase(beginning);
                    Paragraph pAddresse = new Paragraph();
                    pAddresse.IndentationLeft = 30;
                    pAddresse.Add(p1);
                    document.Add(pAddresse);
                }

                string sEmail = "Email: kenhphanmemviet@gmail.com";
                if (!string.IsNullOrEmpty(sEmail))
                {
                    sText = sEmail;
                }

                if (!string.IsNullOrEmpty(sText))
                {
                    sText = sText.Replace(Environment.NewLine, string.Empty).Replace("  ", string.Empty);
                    beginning = new Chunk(sText, fontSubHeader);
                    p1 = new Phrase(beginning);
                    ParagraphpAddresse = new Paragraph();
                    pAddresse.IndentationLeft = 30;
                    pAddresse.Add(p1);
                    document.Add(pAddresse);
                }
                //=================End Header =====================

                //Title
                sText = "LIST PRODUCT" + Environment.NewLine;
                if (!string.IsNullOrEmpty(sText))
                {
                    beginning = new Chunk(sText, fontHeader);
                    p1 = new Phrase(beginning);
                    Paragraph pAddresse = new Paragraph();
                    pAddresse.IndentationLeft = 10;
                    pAddresse.Alignment = 1;
                    pAddresse.Add(p1);
                    document.Add(pAddresse);
                }

                iTextSharp.text.Table datatable = new iTextSharp.text.Table(iCount);
                datatable.Padding = 2;
                datatable.Spacing = 1;
                datatable.WidthPercentage = 98;

                float[] headerwidths = new float[iCount];
                int x = 0;
                int ItemStyleWidth = 10;
                ItemStyleWidth = 100 / iCount;
                foreach (stringsValue in ExportList.Split(','))
                {
                    //Header Table
                    headerwidths[x] = Convert.ToInt32(ItemStyleWidth);
                    Cell cellText = new Cell(new Phrase(sValue, fontTableHeader));
                    cellText.BackgroundColor = new Color(System.Drawing.ColorTranslator.FromHtml(Constants.DEFAULT_BACKGROUNDCOLOR_HEADERROW));
                    cellText.HorizontalAlignment = 1;
                    cellText.VerticalAlignment = 1;
                    datatable.AddCell(cellText);
                    x = x + 1;
                }
                datatable.Widths = headerwidths;
                datatable.BorderWidth = 1;
                datatable.DefaultCellBorderWidth = 1;
                datatable.DefaultHorizontalAlignment = 1;
                datatable.DefaultVerticalAlignment = 1;
                datatable.DefaultCellBorderColor = newiTextSharp.text.Color(System.Drawing.ColorTranslator.FromHtml(Constants.DEFAULT_BORDERCOLOR_TABLE));
                datatable.BorderColor = newiTextSharp.text.Color(System.Drawing.ColorTranslator.FromHtml(Constants.DEFAULT_BORDERCOLOR_TABLE));

                DataTable objBind = new DataTable();
                DataColumn dColumn = null;
                objBind = BindData();

                if (objBind != null)
                {
                    if(objBind.Rows.Count > 0)
                    {
                        foreach (DataRow row in objBind.Rows)
                        {
                            {
                                if (row != null)
                                {
                                    foreach (stringsValue in ExportList.Split(','))
                                    {
                                        foreach (DataColumndColumn_loopVariable in objBind.Columns)
                                        {
                                            dColumn = dColumn_loopVariable;
                                            if (sValue == dColumn.ColumnName)
                                            {
                                                datatable.DefaultHorizontalAlignment = Element.ALIGN_LEFT;
                                                datatable.AddCell(new Phrase(row[sValue].ToString(), fontContent));
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        document.Add(datatable);
                    }
                }
            }
            catch
            {
            }
            document.Close();
            Response.Clear();
            Response.AddHeader("content-disposition", "attachment;filename=" + FileName + ".pdf");
            Response.ContentType = "application/pdf";
            Response.BinaryWrite(msReport.ToArray());
            Response.End();
        }

        #endregion

        #region"Bind Data"

        private voidBindProduct()
        {
            DataTable objBind = newDataTable();
            objBind = BindData();

            if (objBind != null)
            {
                if (objBind.Rows.Count > 0)
                {
                    dlObject.DataSource = objBind;
                    dlObject.DataBind();
                    trMessage.Visible = false;
                    dlObject.Visible = true;
                }
                else
                {
                    trMessage.Visible = true;
                    dlObject.Visible = false;
                }
                updatePanel.Update();
            }
        }

        private DataTableBindData()
        {
            SqlDataProvider objSQL = newSqlDataProvider();
            DataTable objBind = objSQL.FillTable("Select Products.* From Products");
            return objBind;
        }

        #endregion

        #region"Event Handles"

        protected voidPage_Load(object sender, System.EventArgs e)
        {
            try
            {
                ((ExportSelectedColumnsUsingItextsharp.UserControls.Popup_SelectedColumns)ucSelectedColumns).OnSelectedRow += MySelExport_OnSelectedRow;
                if (!IsPostBack)
                {
                    BindProduct();
                }
            }
            catch
            {
            }
        }

        protected voidcmdExport_Click(object sender, System.EventArgs e)
        {
            var ucSelected = (ExportSelectedColumnsUsingItextsharp.UserControls.Popup_SelectedColumns)ucSelectedColumns;
            ucSelected.ShowPopup(-1);
        }

        #endregion
    }
}

Bây giờ chạy Project bạn sẽ có kết quả như ảnh phía dưới.

Code Example C#, Code Example VB.NET
Code Example C#, Code Example VB.NET



Chúc các bạn thành công!

Quang Bình

0 comments Blogger 0 Facebook

Post a Comment

 
lập trình đốt nét © 2013. All Rights Reserved. Powered by Blogger
Top