توضیحات و دانلود

خروجی DataSet یا DataTable در ورد اکسل PDF و فرمت های CSV با asp.net
0 0
خروجی DataSet یا DataTable در ورد اکسل PDF و فرمت های CSV با asp.net

با سلام در بسیاری از موارد نیاز به خروجی داده یا datatable به قالب، ورد، اکسل، PDF و یا CSV (متن) وجود دارد. در این مقاله  توضیح می دهیم چگونه در ASP.Net خروجی GridView به ورد، اکسل، PDF و یا CSV (متن) یکسان هست.

برای این آموزش  از Database NorthWind استفاده می کنیم که می تواند از اینجا دانلود کنید و سپس به SQL Server خود وصل کنید.

رشته اتصال

در زیر رشته اتصال  به پایگاه داده است قرار داده شده است

<add name="conString" connectionString="Data Source=.\SQLEXPRESS;

                    database=Northwind;Integrated Security=true"/>

فضاهای نام

C #

using System.Data;

using System.Data.SqlClient;

using System.Text;

using System.IO;

using iTextSharp.text;

using iTextSharp.text.pdf;

using iTextSharp.text.html;

using iTextSharp.text.html.simpleparser;

VB.Net

Imports System.Data

Imports System.Data.SqlClient

Imports System.Text

Imports System.IO

Imports iTextSharp.text

Imports iTextSharp.text.pdf

Imports iTextSharp.text.html

Imports iTextSharp.text.html.simpleparser

تابع برای دریافت نتایج در datatable

بعد از استفاده از تابع GetData  برای دریافت اطلاعات مورد نظر از پایگاه داده که در زیر آمده است استفاده می کنیم.

C #

private DataTable GetData(SqlCommand cmd)

{

    DataTable dt = new DataTable();

    String strConnString = System.Configuration.ConfigurationManager.

         ConnectionStrings["conString"].ConnectionString;

    SqlConnection con = new SqlConnection(strConnString);

    SqlDataAdapter sda = new SqlDataAdapter();

    cmd.CommandType = CommandType.Text;

    cmd.Connection = con;

    try

    {

        con.Open();

        sda.SelectCommand = cmd;

        sda.Fill(dt);

        return dt;

    }

    catch (Exception ex)

    {

        throw ex;

    }

    finally

    {

        con.Close();

        sda.Dispose();

        con.Dispose();

    }

}

VB.Net

Private Function GetData(ByVal cmd As SqlCommand) As DataTable

    Dim dt As New DataTable()

    Dim strConnString As [String] = System.Configuration _

        .ConfigurationManager.ConnectionStrings("conString").ConnectionString

    Dim con As New SqlConnection(strConnString)

    Dim sda As New SqlDataAdapter()

    cmd.CommandType = CommandType.Text

    cmd.Connection = con

    Try

       con.Open()

       sda.SelectCommand = cmd

       sda.Fill(dt)

       Return dt

    Catch ex As Exception

       Throw ex

    Finally

        con.Close()

        sda.Dispose()

        con.Dispose()

    End Try

End Function

همانطور که در بالا  می بینید , پرس و جو را به تابع GetData منتقل می کنیم و نتایج را به عنوان data-back بازگشت می دهیم.

خوروجی به صورت  ورد

کد زیر خروجی datatable به فرمت ورد است. ابتدا datatable را با استفاده از تابع GetData پر می کنیم و سپس آن را به یک GridView ساختگی متصل کرده و سپس GridView ساختگی به عنوان سند ورد ارائه می شود.

C #

protected void ExportToWord(object sender, EventArgs e)

{

    //Get the data from database into datatable

    string strQuery = "select CustomerID, ContactName, City, PostalCode" +

                      " from customers";

    SqlCommand cmd = new SqlCommand(strQuery);

    DataTable dt = GetData(cmd);

 

    //Create a dummy GridView

    GridView GridView1 = new GridView();

    GridView1.AllowPaging = false;

    GridView1.DataSource = dt;

    GridView1.DataBind();

 

    Response.Clear();

    Response.Buffer = true;

    Response.AddHeader("content-disposition",

        "attachment;filename=DataTable.doc");

    Response.Charset = "";

    Response.ContentType = "application/vnd.ms-word ";

    StringWriter sw = new StringWriter();

    HtmlTextWriter hw = new HtmlTextWriter(sw);

    GridView1.RenderControl(hw);

    Response.Output.Write(sw.ToString());

    Response.Flush();

    Response.End();

}

VB.Net

Protected Sub ExportToWord(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnExportWord.Click

   'Get the data from database into datatable

   Dim strQuery As String = "select CustomerID, ContactName, City, " & _

                                 "PostalCode from customers"

   Dim cmd As New SqlCommand(strQuery)

   Dim dt As DataTable = GetData(cmd)

 

   'Create a dummy GridView

   Dim GridView1 As New GridView()

   GridView1.AllowPaging = False

   GridView1.DataSource = dt

   GridView1.DataBind()

 

   Response.Clear()

   Response.Buffer = True

   Response.AddHeader("content-disposition", _

        "attachment;filename=DataTable.doc")

   Response.Charset = ""

   Response.ContentType = "application/vnd.ms-word "

   Dim sw As New StringWriter()

   Dim hw As New HtmlTextWriter(sw)

   GridView1.RenderControl(hw)

   Response.Output.Write(sw.ToString())

   Response.Flush()

   Response.End()

End Sub

شکل زیر نشان دهنده مایکروسافت ورد تولید شده است.


خروجی به صورت اکسل

کد زیر خروجی datatable به فرمت اکسل است. ابتدا datatable را با استفاده از تابع GetData پر می کنیم و سپس آن را به یک GridView ساختگی متصل کرده و بعد GridView ساختگی به عنوان Workbook Excel ارائه می شود.  سبک متن را به تمام ردیف ها اعمال می کنیم تا آن را به صورت متن ارائه دهیم .

C #

protected void ExportToExcel(object sender, EventArgs e)

{

    //Get the data from database into datatable

    string strQuery = "select CustomerID, ContactName, City, PostalCode" +

        " from customers";

    SqlCommand cmd = new SqlCommand(strQuery);

    DataTable dt = GetData(cmd);

 

    //Create a dummy GridView

    GridView GridView1 = new GridView();

    GridView1.AllowPaging = false;

    GridView1.DataSource = dt;

    GridView1.DataBind();

 

    Response.Clear();

    Response.Buffer = true;

    Response.AddHeader("content-disposition",

     "attachment;filename=DataTable.xls");

    Response.Charset = "";

    Response.ContentType = "application/vnd.ms-excel";

    StringWriter sw = new StringWriter();

    HtmlTextWriter hw = new HtmlTextWriter(sw);

 

    for (int i = 0; i < GridView1.Rows.Count; i++)

    {

        //Apply text style to each Row

        GridView1.Rows[i].Attributes.Add("class", "textmode");

    }

    GridView1.RenderControl(hw);

 

    //style to format numbers to string

    string style = @"<style> .textmode { mso-number-format:\@; } </style>";

    Response.Write(style);

    Response.Output.Write(sw.ToString());

    Response.Flush();

    Response.End();

}

VB.Net

Protected Sub ExportToExcel(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnExportExcel.Click

     'Get the data from database into datatable

     Dim strQuery As String = "select CustomerID, ContactName, City, " & _

                                 "PostalCode from customers"

     Dim cmd As New SqlCommand(strQuery)

     Dim dt As DataTable = GetData(cmd)

 

     'Create a dummy GridView

     Dim GridView1 As New GridView()

     GridView1.AllowPaging = False

     GridView1.DataSource = dt

     GridView1.DataBind()

 

     Response.Clear()

     Response.Buffer = True

     Response.AddHeader("content-disposition", _

          "attachment;filename=DataTable.xls")

     Response.Charset = ""

     Response.ContentType = "application/vnd.ms-excel"

     Dim sw As New StringWriter()

     Dim hw As New HtmlTextWriter(sw)

 

     For i As Integer = 0 To GridView1.Rows.Count - 1

       'Apply text style to each Row

        GridView1.Rows(i).Attributes.Add("class", "textmode")

     Next

     GridView1.RenderControl(hw)

 

     'style to format numbers to string

     Dim style As String = "<style> .textmode{mso-number-format:\@;}</style>"

     Response.Write(style)

     Response.Output.Write(sw.ToString())

     Response.Flush()

     Response.End()

End Sub

شکل زیر نمودار مایکروسافت اکسل تولید شده را نمایش می دهد.


خروجی به صورت  فرمت سند قابل حمل (PDF)

کد زیر خروجی datatable به فرمت PDF است. ابتدا datatable را با استفاده از تابع GetData پر می کنیم و سپس آن را به یک GridView ساختگی متصل کرده و بعد GridView ساختگی به عنوان یک سند PDF با استفاده از کتابخانه iTextSharp که یک کتابخانه منبع آزاد است ارائه کنیم و می تواند از اینجا دانلود شود

C #

protected void ExportToPDF(object sender, EventArgs e)

{

    //Get the data from database into datatable

    string strQuery = "select CustomerID, ContactName, City, PostalCode" +

        " from customers";

    SqlCommand cmd = new SqlCommand(strQuery);

    DataTable dt = GetData(cmd);

 

    //Create a dummy GridView

    GridView GridView1 = new GridView();

    GridView1.AllowPaging = false;

    GridView1.DataSource = dt;

    GridView1.DataBind();

 

    Response.ContentType = "application/pdf";

    Response.AddHeader("content-disposition",

        "attachment;filename=DataTable.pdf");

    Response.Cache.SetCacheability(HttpCacheability.NoCache);

    StringWriter sw = new StringWriter();

    HtmlTextWriter hw = new HtmlTextWriter(sw);

    GridView1.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(); 

}

VB.Net

Protected Sub ExportToPDF(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnExportPDF.Click

    'Get the data from database into datatable

    Dim strQuery As String = "select CustomerID, ContactName, City," _

            & " PostalCode from customers"

    Dim cmd As New SqlCommand(strQuery)

    Dim dt As DataTable = GetData(cmd)

 

        'Create a dummy GridView

    Dim GridView1 As New GridView()

    GridView1.AllowPaging = False

    GridView1.DataSource = dt

    GridView1.DataBind()

 

    Response.ContentType = "application/pdf"

    Response.AddHeader("content-disposition", _

           "attachment;filename=DataTable.pdf")

    Response.Cache.SetCacheability(HttpCacheability.NoCache)

    Dim sw As New StringWriter()

    Dim hw As New HtmlTextWriter(sw)

    GridView1.RenderControl(hw)

    Dim sr As New StringReader(sw.ToString())

    Dim pdfDoc As New Document(PageSize.A4, 10.0F, 10.0F, 10.0F, 0.0F)

    Dim htmlparser As New HTMLWorker(pdfDoc)

    PdfWriter.GetInstance(pdfDoc, Response.OutputStream)

    pdfDoc.Open()

    htmlparser.Parse(sr)

    pdfDoc.Close()

    Response.Write(pdfDoc)

    Response.End()

End Sub

شکل زیر نشان دهنده سند PDF تولید شده است.

خروجی به صورت جدا شده هر فیلد با کاما (CSV)

کد زیر خروجی datatable به CSV یا متن  است. ابتدا dataTable را با استفاده از تابع GetData پر می کنیم. برای خروجی داده به CSV، نیازی به ساختن GridView وجود ندارد. ما فقط باید از طریق پرونده ها حلقه بزنیم و کاما کاراکتر مشخصه را اضافه کنیم.

C #

protected void ExportToCSV(object sender, EventArgs e)

{

    //Get the data from database into datatable

    string strQuery = "select CustomerID, ContactName, City, PostalCode" +

         " from customers";

    SqlCommand cmd = new SqlCommand(strQuery);

    DataTable dt = GetData(cmd);

 

    Response.Clear();

    Response.Buffer = true;

    Response.AddHeader("content-disposition",

        "attachment;filename=DataTable.csv");

    Response.Charset = "";

    Response.ContentType = "application/text";

 

 

    StringBuilder sb = new StringBuilder();

    for (int k = 0; k < dt.Columns.Count; k++)

    {

        //add separator

        sb.Append(dt.Columns[k].ColumnName + ',');

    }

    //append new line

    sb.Append("\r\n");

    for (int i = 0; i < dt.Rows.Count; i++)

    {

        for (int k = 0; k < dt.Columns.Count; k++)

        {

            //add separator

            sb.Append(dt.Rows[i][k].ToString().Replace(",", ";") + ',');

        }

        //append new line

        sb.Append("\r\n");

    }

    Response.Output.Write(sb.ToString());

    Response.Flush();

    Response.End();

}

VB.Net

Protected Sub ExportToCSV(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnExportCSV.Click

   'Get the data from database into datatable

   Dim strQuery As String = "select CustomerID, ContactName, City," & _

           " PostalCode from customers"

   Dim cmd As New SqlCommand(strQuery)

   Dim dt As DataTable = GetData(cmd)

 

   Response.Clear()

   Response.Buffer = True

   Response.AddHeader("content-disposition", _

           "attachment;filename=DataTable.csv")

   Response.Charset = ""

   Response.ContentType = "application/text"

 

   Dim sb As New StringBuilder()

   For k As Integer = 0 To dt.Columns.Count - 1

        'add separator

         sb.Append(dt.Columns(k).ColumnName + ","c)

   Next

   'append new line

   sb.Append(vbCr & vbLf)

   For i As Integer = 0 To dt.Rows.Count - 1

      For k As Integer = 0 To dt.Columns.Count - 1

        'add separator

         sb.Append(dt.Rows(i)(k).ToString().Replace(",", ";") + ","c)

      Next

     'append new line

      sb.Append(vbCr & vbLf)

   Next

   Response.Output.Write(sb.ToString())

   Response.Flush()

   Response.End()

End Sub

شکل زیر فایل CSV تولید شده را نمایش می دهد.

 


دانلود
  • لینک های دانلود دوره های آموزشی تا پایان دوره قابل دانلود می باشد.
  • برای خارج کردن فایل ها از حالت فشرده از ورژن جدید نرم افزار winrar استفاده کنید.
  • برای خارج کردن فایل ها از حالت فشرده لینک های دانلودی که چندین قسمت می باشند فقط قسمت اول را از حالت فشرده خارج کنید.
  • لطفا توضیحات نوشته شده برای مطالب را با دقت بخوانید.
  • برای نمایش فیلم ها می توانید از نرم افزار هایی مانند Km Player , VLC Player یا Media Player Classic استفاده کنید.

ارسال نظر
ارسال پیام به :