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

خروج GridView های چندگانه به SpreadSheet اکسل در ASP.Net
0 0
خروج GridView های چندگانه به SpreadSheet اکسل در ASP.Net

با سلام خدمت کاربران گرامی .در این مقاله خروج GridView های چندگانه به SpreadSheet اکسل در ASP.Net را توضیح خواهیم داد که پاسخ کار برای سوالات زیر است

1. چگونه GridView های متعدد را از اکسل خارج کنیم؟

2. چگونه می توان GridView ها را در اکسل ادغام کرد؟

GridViews

در زیر کد HTML از دو GridViews است

<asp:GridView ID="GridView1" runat="server"

    AutoGenerateColumns = "false" Font-Names = "Arial"

    Font-Size = "11pt" AlternatingRowStyle-BackColor = "#C2D69B" 

    HeaderStyle-BackColor = "green" AllowPaging ="true"  

    OnPageIndexChanging = "OnPaging">

   <Columns>

    <asp:BoundField ItemStyle-Width = "150px" DataField = "CustomerID"

       HeaderText = "CustomerID" />

    <asp:BoundField ItemStyle-Width = "150px" DataField = "City"

       HeaderText = "City"/>

   </Columns>

</asp:GridView>

<br /><br />

<asp:GridView ID="GridView2" runat="server"

    AutoGenerateColumns = "false" Font-Names = "Arial"

    Font-Size = "11pt" AlternatingRowStyle-BackColor = "#C2D69B" 

    HeaderStyle-BackColor = "green" AllowPaging ="true"  

    OnPageIndexChanging = "OnPaging" >

   <Columns>

    <asp:BoundField ItemStyle-Width = "150px" DataField = "OrderID"

       HeaderText = "Order ID" />

    <asp:BoundField ItemStyle-Width = "150px" DataField = "CustomerID"

      HeaderText = "Customer ID"/>

   </Columns>

</asp:GridView>

فضاهای نام

شما باید فضای نامهای زیر را وارد کنید

C #

using System.IO;

using System.Text;

using System.Configuration;

VB.Net

Imports System.IO

Imports System.Text

Imports System.Configuration

رشته اتصال

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

<connectionStrings>

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

               database=Northwind;Integrated Security=true" />

</connectionStrings>

GridViews DataBinding

در زیر چگونگی اتصال دو GridView در رویداد Page Load را در صفحه وب ASP.Net قرار داده ایم . که یک Query Query ساده را اجرا می کنبم و داده ها را به هر دو GridView با استفاده از تابع GetData مرتبط می کنیم .

C #

protected void Page_Load(object sender, EventArgs e)

{

    string strQuery = "select CustomerID,City,Country from customers";

    SqlCommand cmd = new SqlCommand(strQuery);

    DataTable dt = GetData(cmd);

    GridView1.DataSource = dt;

    GridView1.DataBind();

 

    strQuery = "select OrderID, CustomerID, EmployeeID from  Orders";

    cmd = new SqlCommand(strQuery);

    dt = GetData(cmd);

    GridView2.DataSource = dt;

    GridView2.DataBind();

}

 

private DataTable GetData(SqlCommand cmd)

{

    DataTable dt = new DataTable();

    String strConnString = 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

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load

   Dim strQuery As String = "select CustomerID,City,Country from customers"

   Dim cmd As New SqlCommand(strQuery)

   Dim dt As DataTable = GetData(cmd)

   GridView1.DataSource = dt

   GridView1.DataBind()

 

   strQuery = "select OrderID, CustomerID, EmployeeID from Orders"

   cmd = New SqlCommand(strQuery)

   dt = GetData(cmd)

   GridView2.DataSource = dt

   GridView2.DataBind()

End Sub

 

Private Function GetData(ByVal cmd As SqlCommand) As DataTable

   Dim dt As New DataTable()

   Dim strConnString As String = 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

شکل زیر دو GridView را که ما با استفاده از پایگاه داده NorthWind جمع آوری کردیم نمایش می دهیم.


مفهوم

حالا برای خروج GridView های متعدد, شما باید GridView ها را در یک کنترل قرار دهید که به صورت یک کانتینر عمل می کند و سپس آن کنترل را به جای GridView ها خارج می کند. از این رو در اینجا یک جدول پویا جعلی ایجاد می کنیم و به جای GridViews، جدول را خارج می کنیم.

گزینه پیمایش فعال کردن , غیر فعال کردن و تراز کردن GridView

در اینجا امکانات کاربری را فراهم کردیم که آیا کاربر میخواهد رکوردهای کامل یا فقط سوابق برای صفحه فعلی را داشته باشد .  همچنین انتخاب کردیم که آیا دو GridView ها باید به صورت افقی کنار یکدیگر قرار بگیرند یا به صورت عمودی  با استفاده از دوRadioButtonLists

<br />Paging Enabled?

<asp:RadioButtonList ID="rbPaging" runat="server">

<asp:ListItem  Text = "Yes" Value = "True" Selected = "True">

</asp:ListItem>

<asp:ListItem  Text = "No" Value = "False"></asp:ListItem>

</asp:RadioButtonList>

<br />

Export Preference

<asp:RadioButtonList ID="rbPreference" runat="server">

      <asp:ListItem  Text = "Vertical" Value = "1" Selected = "True">

</asp:ListItem>

      <asp:ListItem  Text = "Horizontal" Value = "2"></asp:ListItem>

</asp:RadioButtonList>

در قسمت front end که به شکل زیر است . همانطور که می توانید ببینید کاربر می تواند انتخاب کند که چگونه می خواهد خروجی در فایل اکسل خارج شود .

خروج GridView های چندگانه

در بخش نهایی خروج دو GridViews به اکسل بر روی دکمه Export کلیک کنید . به کد زیر را مراجعه کنید

C #

protected void btnExportExcel_Click(object sender, EventArgs e)

{

    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);

 

    PrepareForExport(GridView1);

    PrepareForExport(GridView2);

 

    Table tb = new Table();

    TableRow tr1 = new TableRow();

    TableCell cell1 = new TableCell();

    cell1.Controls.Add(GridView1);

    tr1.Cells.Add(cell1);

    TableCell cell3 = new TableCell();

    cell3.Controls.Add(GridView2);

    TableCell cell2 = new TableCell();

    cell2.Text = "&nbsp;";

    if (rbPreference.SelectedValue == "2")

    {

        tr1.Cells.Add(cell2);

        tr1.Cells.Add(cell3);

        tb.Rows.Add(tr1);

    }

    else

    {

        TableRow tr2 = new TableRow();

        tr2.Cells.Add(cell2);  

        TableRow tr3 = new TableRow();

        tr3.Cells.Add(cell3);

        tb.Rows.Add(tr1);

        tb.Rows.Add(tr2);

        tb.Rows.Add(tr3);

    }

    tb.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 btnExportExcel_Click(ByVal sender As Object, ByVal e As EventArgs)

   Response.Clear()

   Response.Buffer = True

 

   Response.AddHeader("content-disposition", _

          "attachment;filename=GridViewExport.xls")

   Response.Charset = ""

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

   Dim sw As New StringWriter()

   Dim hw As New HtmlTextWriter(sw)

 

   PrepareForExport(GridView1)

   PrepareForExport(GridView2)

 

   Dim tb As New Table()

   Dim tr1 As New TableRow()

   Dim cell1 As New TableCell()

   cell1.Controls.Add(GridView1)

   tr1.Cells.Add(cell1)

   Dim cell3 As New TableCell()

   cell3.Controls.Add(GridView2)

   Dim cell2 As New TableCell()

   cell2.Text = "&nbsp;"

   If rbPreference.SelectedValue = "2" Then

      tr1.Cells.Add(cell2)

      tr1.Cells.Add(cell3)

      tb.Rows.Add(tr1)

   Else

      Dim tr2 As New TableRow()

      tr2.Cells.Add(cell2)

      Dim tr3 As New TableRow()

      tr3.Cells.Add(cell3)

      tb.Rows.Add(tr1)

      tb.Rows.Add(tr2)

      tb.Rows.Add(tr3)

   End If

   tb.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

یک جدول دینامیکی ایجاد می کنیم و GridView ها را به سلول های جدول دینامیک اضافه می کنیم و سپس جدول را به جای GridView ها ارائه می دهیم. در این روش میتواند دو یا چند GridView را به یک صفحه اکسل خارج کند.

عملکرد PrepareForExport  برخی از قالب بندی ها و یک ظاهر طراحی شده را به GridView مراجعه می کند.

C #

protected void PrepareForExport(GridView Gridview)

{

    Gridview.AllowPaging = Convert.ToBoolean(rbPaging.SelectedItem.Value);   

    Gridview.DataBind();

 

    //Change the Header Row back to white color

    Gridview.HeaderRow.Style.Add("background-color", "#FFFFFF");

 

    //Apply style to Individual Cells

    for (int k = 0; k < Gridview.HeaderRow.Cells.Count; k++)

    {

        Gridview.HeaderRow.Cells[k].Style.Add("background-color", "green");

    }

 

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

    {

        GridViewRow row = Gridview.Rows[i];

 

        //Change Color back to white

        row.BackColor = System.Drawing.Color.White;

 

        //Apply text style to each Row

        row.Attributes.Add("class", "textmode");

 

        //Apply style to Individual Cells of Alternating Row

        if (i % 2 != 0)

        {

            for (int j = 0; j < Gridview.Rows[i].Cells.Count; j++)

            {

                row.Cells[j].Style.Add("background-color", "#C2D69B");

            }

        }

    }

}

VB.Net

Protected Sub PrepareForExport(ByVal Gridview As GridView)

   Gridview.AllowPaging = Convert.ToBoolean(rbPaging.SelectedItem.Value)

   Gridview.DataBind()

 

   'Change the Header Row back to white color

   Gridview.HeaderRow.Style.Add("background-color", "#FFFFFF")

 

   'Apply style to Individual Cells

   For k As Integer = 0 To Gridview.HeaderRow.Cells.Count - 1

       Gridview.HeaderRow.Cells(k).Style.Add("background-color", "green")

   Next

 

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

       Dim row As GridViewRow = Gridview.Rows(i)

 

       'Change Color back to white

       row.BackColor = System.Drawing.Color.White

 

       'Apply text style to each Row

       row.Attributes.Add("class", "textmode")

 

       'Apply style to Individual Cells of Alternating Row

       If i Mod 2 <> 0 Then

          For j As Integer = 0 To Gridview.Rows(i).Cells.Count - 1

            row.Cells(j).Style.Add("background-color", "#C2D69B")

          Next

      End If

   Next

End Sub

در Screenshots زیر GridViews در تنظیمات افقی و عمودی را نمایش می دهد

چیدمان عمودی

ترازبندی افقی

شما ممکن است خطاهای زیر را دریافت کنید. برای حل این مشکل، روی لینک زیر کلیک کنید

RegisterForEventValidation را فقط می توان در (Render) نامگذاری کرد

کنترل 'GridView1' از نوع 'GridView' باید داخل یک تگ فرم با runat = server قرار گیرد

 


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

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