Monday, April 4, 2011
Bạn muốn lập trình cho phép Export dữ liệu từ Datatable, Gridview ra Excel, Word hay PDF? Trong bài viết này mình sẽ giới thiệu với các bạn cách thực hiện điều đó bằng cách sử dụng thư viện itextsharp.dll.
Trước tiên bạn cần download thư viện itextsharp.dll về tại đây.
Sau khi down về giải nén và Add vào thư mục bin của ứng dụng. Sau đó khi cần thực hiện việc Export dữ liệu ra các định dạng khác nhau bạn thực hiện như bài minh họa sau. Trong bài này mình chỉ minh họa cách Export dữ liệu ra các định dạng word, Excel, PDF. Bạn có thể tìm hiểu thêm về thư viện itextsharp.dll để có thể export ra nhiều định dạng khác cùng như tìm hiểu các component khác của thư viện này.
Trước tiên bạn cần tạo một Form gồm một Gridview, và các Button (ExportToRord, ExportToExcelm ExportToPDF) như sau:
Trong code bạn thực hiện như sau: (Minh họa này mình lấy Database Northwind làm ví dụ và dữ liệu Export là các trường CustomerID, CompanyName, ContactName, ContactTitle)
1. Hàm GetDataToTable
private DataTable GetDataToTable(SqlCommand cmd)
{
DataTable dt = new DataTable();
// Khai báo chuỗi kết nối
String strConnString = @"Server =.SQL2005;Initial Catalog=Northwind;User SqlConnection con = new SqlConnection(strConnString);
SqlDataAdapter sda = new SqlDataAdapter();
cmd.CommandType = CommandType.Text;
cmd.Connection = con;
try
{
// Mở kết nối và đổ dữ liệu vào bảng
con.Open();
sda.SelectCommand = cmd;
sda.Fill(dt);
return dt;
}
catch (Exception ex)
{
throw ex;
}
finally
{
//Đóng kết nối
con.Close();
sda.Dispose();
con.Dispose();
}
}
Trong hàm Page_Load bạn thực hiện truy vấn và Bind dữ liệu như sau
protected void Page_Load(object sender, EventArgs e)
{
// Truy vấn và đổ dữ liệu vào Gridview
string TruyVan = @"SELECT c.CustomerID, c.CompanyName,
c.ContactName, c.ContactTitle FROM Customers c";
SqlCommand cmd = new SqlCommand(TruyVan);
DataTable dt = GetDataToTable(cmd);
grvExport.DataSource = dt;
grvExport.DataBind();
}
2. Hàm xuất dữ liệu từ 1 gridview ra word
///
/// Xuất dữ liệu từ GridView ra word
///
private void XuatDuLieuRaWord(GridView MyGridview)
{
Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition", "attachment;filename=GridViewExport.doc");
Response.Charset = "";
Response.ContentType = "application/vnd.ms-word ";
StringWriter sw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);
// Bỏ phân trang - Nếu chỉ muỗn Export Trang hiện hành thì chọn =true
MyGridview.AllowPaging = false;
MyGridview.DataBind();
MyGridview.RenderControl(hw);
Response.Output.Write(sw.ToString());
Response.Flush();
Response.End();
}
3. Hàm xuất dữ liệu từ một gridview ra Excel
///
/// Xuất dữ liệu từ GridView ra Excel
///
private void XuatDuLieuRaExcel(GridView MyGridview)
{
Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition",
"attachment;filename=GridViewExport.xls");
Response.Charset = "";
Response.ContentType = "application/vnd.ms-excel";
StringWriter sw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);
// Bỏ phân trang - Nếu chỉ muỗn Export Trang hiện hành thì chọn =true
MyGridview.AllowPaging = false;
MyGridview.DataBind();
MyGridview.RenderControl(hw);
//Thay đổi Style
string style = @"";
Response.Write(style);
Response.Output.Write(sw.ToString());
Response.Flush();
Response.End();
}
4. Hàm xuất dữ liệu từ gridview ra PDF
///
/// Hàm xuất dữ liệu từ gridview ra pdf
///
private void XuatDuLieuGridRaPDF(GridView MyGridview)
{
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment;filename=GridViewExport.pdf");
Response.Cache.SetCacheability(HttpCacheability.NoCache);
StringWriter sw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);
MyGridview.AllowPaging = false;
MyGridview.DataBind();
MyGridview.RenderControl(hw);
StringReader sr = new StringReader(sw.ToString());
Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f);
HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
pdfDoc.Open();
htmlparser.Parse(sr);
pdfDoc.Close();
Response.Write(pdfDoc);
Response.End();
}
Trong các sự kiện click của các nut button bạn thực hiện như sau:
protected void btnExportWord_Click(object sender, EventArgs e)
{
XuatDuLieuRaWord(grvExport);
}
protected void btnExportExcel_Click(object sender, EventArgs e)
{
XuatDuLieuRaExcel(grvExport);
}
protected void btnExportPDF_Click(object sender, EventArgs e)
{
XuatDuLieuGridRaPDF(grvExport);
}
Bạn chú ý trong code của bạn cần có hàm sau để chứng thực việc sử dụng HtmlForm. Nếu không sẽ có lỗi "Control 'grvExport' of type 'GridView' must be placed inside a form tag with runat=server" khi thực hiện Export.
public override void VerifyRenderingInServerForm(Control control)
{
//Xác nhận điều khiển HtmlForm tại thời gian chạy ASP.NET
}
Labels: C#