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

استفاده از GridView در خروج سوابق انتخاب شده به صفحه اکسل در ASP.Net
0 0
استفاده از GridView در خروج سوابق انتخاب شده به صفحه اکسل در ASP.Net

با سلام در این مقاله استفاده از GridView در خروج سوابق انتخاب شده به صفحه اکسل در ASP.Net را مورد بخث قرار میدهیم .

مفهوم

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

بانک اطلاعاتی

از Northwind Database SQL Server  را که می توان با استفاده از لینک زیر دانلود کرد، استفاده می کنیم .دانلود Northwind پایگاه داده

پس از دانلود، باید پایگاه داده خود را به SQL Instance Instance اضافه کنید

نشانه GridView

درکد زير GridView Markup همانطور که اشاره شده است ، هدر را که اضافه کرده ايم را انتخاب کنيد.

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

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

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

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

OnPageIndexChanging = "OnPaging" DataKeyNames = "CustomerID" >

<Columns>

<asp:TemplateField>

<HeaderTemplate>

  <asp:CheckBox ID="chkAll" runat="server" onclick = "checkAll(this)" />

</HeaderTemplate>

<ItemTemplate>

 <asp:CheckBox ID="CheckBox1" runat="server" onclick = "Check_Click(this)" />

</ItemTemplate>

</asp:TemplateField>

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

 HeaderText = "CustomerID" />

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

 HeaderText = "City"/>

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

 HeaderText = "Country"/>

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

 HeaderText = "PostalCode"/>

</Columns>

</asp:GridView>

برای بررسی کردن تمام قابلیت ها از جاوا اسکریپت استفاده میکنیم .

اتصال GridView

در زیر روشی است که برای اتصال داده ها به کنترل GridView ASP.Net استفاده می شود که به سادگی یک پرس وجو انتخاب را در جدول مشتریان پایگاه Northwind وارد می کند.

C #

private void BindGrid()

{

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

        " from customers";

    DataTable dt = new DataTable();

    String strConnString = System.Configuration.ConfigurationManager

                .ConnectionStrings["conString"].ConnectionString;

    SqlConnection con = new SqlConnection(strConnString);

    SqlDataAdapter sda = new SqlDataAdapter();

    SqlCommand cmd = new SqlCommand(strQuery);

    cmd.CommandType = CommandType.Text;

    cmd.Connection = con;

    try

    {

        con.Open();

        sda.SelectCommand = cmd;

        sda.Fill(dt);

        GridView1.DataSource = dt;

        GridView1.DataBind();

    }

    catch (Exception ex)

    {

        throw ex;

    }

    finally

    {

        con.Close();

        sda.Dispose();

        con.Dispose();

    }

}

VB.Net

Private Sub BindGrid()

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

                " from customers"

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

  Dim cmd As New SqlCommand(strQuery)

  cmd.CommandType = CommandType.Text

  cmd.Connection = con

  Try

     con.Open()

     sda.SelectCommand = cmd

     sda.Fill(dt)

     GridView1.DataSource = dt

     GridView1.DataBind()

  Catch ex As Exception

     Throw ex

  Finally

     con.Close()

     sda.Dispose()

    con.Dispose()

  End Try

End Sub

حفظ حالت checkboxes

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

دو عملکرد برای رسیدن به این روش کمک می کنند

C #

private void PopulateCheckBoxArray()

{

    ArrayList CheckBoxArray;

    if (ViewState["CheckBoxArray"] != null)

    {

        CheckBoxArray = (ArrayList)ViewState["CheckBoxArray"];

    }

    else

    {

        CheckBoxArray = new ArrayList();

    }

 

    int CheckBoxIndex;

    bool CheckAllWasChecked = false;

    CheckBox chkAll = (CheckBox)GridView1.HeaderRow.Cells[0].FindControl("chkAll");

    string checkAllIndex = "chkAll-" + GridView1.PageIndex;

    if (chkAll.Checked)

    {

        if (CheckBoxArray.IndexOf(checkAllIndex) == -1)

        {

            CheckBoxArray.Add(checkAllIndex);

        }

    }

    else

    {

        if (CheckBoxArray.IndexOf(checkAllIndex) != -1)

        {

            CheckBoxArray.Remove(checkAllIndex);

            CheckAllWasChecked = true;

        }

    }

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

    {

        if (GridView1.Rows[i].RowType == DataControlRowType.DataRow)

        {

            CheckBox chk = (CheckBox)GridView1.Rows[i].Cells[0].FindControl("CheckBox1");

            CheckBoxIndex = GridView1.PageSize * GridView1.PageIndex + (i + 1);

            if (chk.Checked)

            {

                if (CheckBoxArray.IndexOf(CheckBoxIndex) == -1 && !CheckAllWasChecked)

                {

                    CheckBoxArray.Add(CheckBoxIndex);

                }

            }

            else

            {

                if (CheckBoxArray.IndexOf(CheckBoxIndex) != -1 || CheckAllWasChecked)

                {

                    CheckBoxArray.Remove(CheckBoxIndex);

                }

            }

        }

    }

    ViewState["CheckBoxArray"] = CheckBoxArray;

}

VB.Net

Private Sub PopulateCheckBoxArray()

        Dim CheckBoxArray As ArrayList

        If ViewState("CheckBoxArray") IsNot Nothing Then

            CheckBoxArray = DirectCast(ViewState("CheckBoxArray"), ArrayList)

        Else

            CheckBoxArray = New ArrayList()

        End If

 

        Dim CheckBoxIndex As Integer

        Dim CheckAllWasChecked As Boolean = False

        Dim chkAll As CheckBox = DirectCast(GridView1.HeaderRow.Cells(0).FindControl("chkAll"), CheckBox)

        Dim checkAllIndex As String = "chkAll-" & GridView1.PageIndex

        If chkAll.Checked Then

            If CheckBoxArray.IndexOf(checkAllIndex) = -1 Then

                CheckBoxArray.Add(checkAllIndex)

            End If

        Else

            If CheckBoxArray.IndexOf(checkAllIndex) <> -1 Then

                CheckBoxArray.Remove(checkAllIndex)

                CheckAllWasChecked = True

            End If

        End If

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

            If GridView1.Rows(i).RowType = DataControlRowType.DataRow Then

                Dim chk As CheckBox = DirectCast(GridView1.Rows(i).Cells(0).FindControl("CheckBox1"), CheckBox)

                CheckBoxIndex = GridView1.PageSize * GridView1.PageIndex + (i + 1)

                If chk.Checked Then

                    If CheckBoxArray.IndexOf(CheckBoxIndex) = -1 AndAlso Not CheckAllWasChecked Then

                        CheckBoxArray.Add(CheckBoxIndex)

                    End If

                Else

                    If CheckBoxArray.IndexOf(CheckBoxIndex) <> -1 OrElse CheckAllWasChecked Then

                        CheckBoxArray.Remove(CheckBoxIndex)

                    End If

                End If

            End If

        Next

        ViewState("CheckBoxArray") = CheckBoxArray

End Sub

تابع فوق اساسا یک  لیست پرونده های انتخاب شده در ViewState را نگه می دارد تا زمان خروج  همه سوابق توسط کاربر انتخاب شده است. این تابع هر زمان بر روی صفحه باز می شود یک PostBack در رویداد بارگذاری صفحه نمایش میدهد .

C #

protected void Page_Load(object sender, EventArgs e)

{

    Response.Cache.SetCacheability(HttpCacheability.NoCache);

    if (!IsPostBack)

    {

        PopulateCheckBoxArray();

    }

    BindGrid();

}

VB.Net

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

        Response.Cache.SetCacheability(HttpCacheability.NoCache)

        If Not IsPostBack Then

            PopulateCheckBoxArray()

        End If

        BindGrid()

End Sub

 تابع بعدی در زیر آمده است :

C #

private void ResetCheckBoxes()

{

    if (ViewState["CheckBoxArray"] != null)

    {

        ArrayList CheckBoxArray = (ArrayList)ViewState["CheckBoxArray"];

        string checkAllIndex = "chkAll-" + GridView1.PageIndex;

 

        if (CheckBoxArray.IndexOf(checkAllIndex) != -1)

        {

            CheckBox chkAll = (CheckBox)GridView1.HeaderRow.Cells[0].FindControl("chkAll");

            chkAll.Checked = true;

        }

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

        {

 

            if (GridView1.Rows[i].RowType == DataControlRowType.DataRow)

            {

                if (CheckBoxArray.IndexOf(checkAllIndex) != -1)

                {

                    CheckBox chk = (CheckBox)GridView1.Rows[i].Cells[0].FindControl("CheckBox1");

                    chk.Checked = true;

                }

                else

                {

                    int CheckBoxIndex = GridView1.PageSize * (GridView1.PageIndex) + (i + 1);

                    if (CheckBoxArray.IndexOf(CheckBoxIndex) != -1)

                    {

                        CheckBox chk = (CheckBox)GridView1.Rows[i].Cells[0].FindControl("CheckBox1");

                        chk.Checked = true;

                    }

                }

            }

        }

    }

}

VB.Net

Private Sub ResetCheckBoxes()

        If ViewState("CheckBoxArray") IsNot Nothing Then

            Dim CheckBoxArray As ArrayList = DirectCast(ViewState("CheckBoxArray"), ArrayList)

            Dim checkAllIndex As String = "chkAll-" & GridView1.PageIndex

 

            If CheckBoxArray.IndexOf(checkAllIndex) <> -1 Then

                Dim chkAll As CheckBox = DirectCast(GridView1.HeaderRow.Cells(0).FindControl("chkAll"), CheckBox)

                chkAll.Checked = True

            End If

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

 

                If GridView1.Rows(i).RowType = DataControlRowType.DataRow Then

                    If CheckBoxArray.IndexOf(checkAllIndex) <> -1 Then

                        Dim chk As CheckBox = DirectCast(GridView1.Rows(i).Cells(0).FindControl("CheckBox1"), CheckBox)

                        chk.Checked = True

                    Else

                        Dim CheckBoxIndex As Integer = GridView1.PageSize * (GridView1.PageIndex) + (i + 1)

                        If CheckBoxArray.IndexOf(CheckBoxIndex) <> -1 Then

                            Dim chk As CheckBox = DirectCast(GridView1.Rows(i).Cells(0).FindControl("CheckBox1"), CheckBox)

                            chk.Checked = True

                        End If

                    End If

                End If

            Next

        End If

End Sub

کار تابع فوق این است که تنظیمات جعبه انتخاب شده برای صفحه GridView ASP.Net فعلی را بازنشانی میکند و بررسی می کند که آیا لیست CheckState ViewState دارای چک لیستی که متعلق به صفحه فعلی است یا خیر . اگر آن یکی را پیدا کند، املا چک شده را برای این جعبه را به درستی تنظیم می کند. این تابع در صفحه تغییر رویداد ASP.Net GridView است که در زیر ذکر شده است :

C #

protected void OnPaging(object sender, GridViewPageEventArgs  e)

{

    GridView1.PageIndex = e.NewPageIndex;

    GridView1.DataBind();

    ResetCheckBoxes();

}

VB.Net

Protected Sub OnPaging(ByVal sender As Object, ByVal e As GridViewPageEventArgs)

        GridView1.PageIndex = e.NewPageIndex

        GridView1.DataBind()

        ResetCheckBoxes()

End Sub

خروج سوابق انتخاب شده به اکسل

در زیر گزینه Export Button را کلیک کنید که حروج پرونده های انتخاب شده در GridView ASP.Net را به اکسل پردازش می کند.

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

 

    GridView1.AllowPaging = false;

    GridView1.DataBind();

 

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

    GridView1.HeaderRow.Cells[0].Visible = false;

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

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

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

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

    if (ViewState["CheckBoxArray"] != null)

    {

        ArrayList CheckBoxArray = (ArrayList)ViewState["CheckBoxArray"];

        string checkAllIndex = "chkAll-" + GridView1.PageIndex;

        int rowIdx = 0;

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

        {

            GridViewRow row = GridView1.Rows[i];

            row.Visible = false;

 

            if (row.RowType == DataControlRowType.DataRow)

            {

                if (CheckBoxArray.IndexOf(i + 1) != -1)

                {

                    row.Visible = true;

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

                    row.Cells[0].Visible = false;

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

                    if (rowIdx % 2 != 0)

                    {

                        

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

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

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

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

                    }

                    rowIdx++;

                }

            }

        }

    }

    GridView1.RenderControl(hw);

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

    Response.Write(style);

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

    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)

 

        GridView1.AllowPaging = False

        GridView1.DataBind()

 

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

        GridView1.HeaderRow.Cells(0).Visible = False

        GridView1.HeaderRow.Cells(1).Style.Add("background-color", "green")

        GridView1.HeaderRow.Cells(2).Style.Add("background-color", "green")

        GridView1.HeaderRow.Cells(3).Style.Add("background-color", "green")

        GridView1.HeaderRow.Cells(4).Style.Add("background-color", "green")

        If ViewState("CheckBoxArray") IsNot Nothing Then

            Dim CheckBoxArray As ArrayList = DirectCast(ViewState("CheckBoxArray"), ArrayList)

            Dim checkAllIndex As String = "chkAll-" & GridView1.PageIndex

            Dim rowIdx As Integer = 0

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

                Dim row As GridViewRow = GridView1.Rows(i)

                row.Visible = False

 

                If row.RowType = DataControlRowType.DataRow Then

                    If CheckBoxArray.IndexOf(i + 1) <> -1 Then

                      row.Visible = True

                      row.BackColor = System.Drawing.Color.White

                      row.Cells(0).Visible = False

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

                      If rowIdx Mod 2 <> 0 Then

 

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

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

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

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

                      End If

                      rowIdx += 1

                    End If

                End If

            Next

        End If

        GridView1.RenderControl(hw)

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

        Response.Write(style)

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

        Response.[End]()

End Sub

 همه چیز شبیه به عملکرد عادی اکسل است جز اینکه پیش فرض تمام ردیف ها قابل مشاهده هستند Visible = false است و از طریق GridView ردیف حلقه و تایید شاخص با آن از فهرست ذخیره شده در لیست اقلام چک. اگر آیتم در لیست برگزیده شده یا انتخاب شده یافت شود، به سادگی این ردیف خاص را نمایش می دهیم Visible = true.

تصاویر زیر، GridView ASP.Net را با پرونده های انتخاب شده توصیف می کند و همان پرونده ها به سند Word اکسل ایجاد میکند .


همانطور که  متوجه شدید، یک دکمه اضافی به نام Export All اضافه کرده ایم که اساسا عملکرد نرمال برای خروج  GridView ASP.Net به Excel است .خروج  GridView  با تصاویر به ورد، اکسل و فرمت PDF در ASP.Net است  . اما فراموش نکنید که اولین سلول visible = false در هر ردیف برای مخفی کردن کادرهای انتخاب شده باشد.

 


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

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