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

استفاده از روش SQL Store در پیگیری سفارشی GridView با ASP.Net
0 0
استفاده از روش SQL Store در پیگیری سفارشی GridView با ASP.Net

با سلام در این مقاله توضیح خواهیم داد که چگونه پیگیری سفارشی را در کنترل GridView ASP.Net اجرا کنید.
بانک اطلاعاتی
در اینجا از پایگاه Northwind استفاده می کنیم. شما می توانید آن را از اینجا دانلود کنید
پایگاه داده Northwind را دانلود و نصب کنید
نیاز به صفحه سفارشی
در ASP.Net GridView تمام پرونده ها را استخراج میشود و سپس یک صفحه از سوابق جاسازی شده نمایش داده می شود. بنابراین برای مثال اگر جدول شما دارای 1000 رکورد باشد و شما فقط باید 50 رکورد را در هر صفحه نمایش دهید، GridView تمام  950 رکورد را حذف خواهد کرد و 50 رکورد را براساس شاخص صفحه انتخاب شده توسط کاربران نمایش می دهد.
بنابراین، رویکرد فوق از نظر پهنای باند و عملکرد کاملا ناکارآمد است. با صفحه بندی سفارشی، ما هر یک از صفحات را براساس شاخص صفحه ارائه می دهیم. بنابراین اگر جدول ما دارای 1000 رکورد باشد و ما فقط باید 50 رکورد در هر صفحه نمایش دهیم، ما تنها 50 رکورد را براساس شاخص صفحه انتخاب خواهیم کرد. بنابراین این کار عملکرد برنامه را افزایش می دهد.
روش ذخیره سازی صفحه بندی
SQL Server 2005 کلید جدید ROW_NUMBER را به ما نشان داد که به ما اجازه می دهد اعداد ردیف را به پرونده هایی که از جدول انتخاب می کنیم، بدهیم. با استفاده از این شماره ردیف، ما می توانیم منطق صفحه بندی سفارشی خود را در روش Stored SQL Server اجرا کنیم.

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

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
CREATE PROCEDURE GetCustomersPageWise
      @PageIndex INT = 1
      ,@PageSize INT = 10
      ,@RecordCount INT OUTPUT
AS
BEGIN
      SET NOCOUNT ON;
      SELECT ROW_NUMBER() OVER
      (
            ORDER BY [CustomerID] ASC
      )AS RowNumber
      ,[CustomerID]
      ,[CompanyName]
      ,[ContactName]
     INTO #Results
      FROM [Customers]
     
      SELECT @RecordCount = COUNT(*)
      FROM #Results
           
      SELECT * FROM #Results
      WHERE RowNumber BETWEEN(@PageIndex -1) * @PageSize + 1 AND(((@PageIndex -1) * @PageSize + 1) + @PageSize) - 1
     
      DROP TABLE #Results
END
GO

در بالا PassIndex، PageSize را به عنوان پارامترهای ورودی منتقل می کنیم تا بتوانیم سوابق را برای فهرست صفحه دلخواه بدست آوریم. و برای اصلاح Pager ، تعداد کل پرونده های موجود در جدول که ما با استفاده از پارامتر RecordCount جمع آوری می کنیم، نیاز داریم.
 
کد HTML
کد HTML کاملا ساده است و دارای یک GridView ، یک DropDownLists انتخاب اندازه صفحه و یک تکرار کننده که برای اصلاح pager استفاده می شود.

<div>
PageSize:
<asp:DropDownList ID="ddlPageSize" runat="server" AutoPostBack="true" OnSelectedIndexChanged="PageSize_Changed">
    <asp:ListItem Text="10" Value="10" />
    <asp:ListItem Text="25" Value="25" />
    <asp:ListItem Text="50" Value="50" />
</asp:DropDownList>
<hr />
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
    <Columns>
        <asp:BoundField HeaderText="CustomerId" DataField="CustomerId" />
        <asp:BoundField HeaderText="ContactName" DataField="ContactName" />
        <asp:BoundField HeaderText="CompanyName" DataField="CompanyName" />
    </Columns>
</asp:GridView>
<br />
<asp:Repeater ID="rptPager" runat="server">
<ItemTemplate>
    <asp:LinkButton ID="lnkPage" runat="server" Text = '<%#Eval("Text") %>' CommandArgument = '<%# Eval("Value") %>' Enabled = '<%# Eval("Enabled") %>' OnClick = "Page_Changed"></asp:LinkButton>
</ItemTemplate>
</asp:Repeater>
</div>

پیاده سازی صفحه سفارشی
اکنون شروع به اجرای صفحه بندی سفارشی در کد پشت سر می کنیم. ابتدا باید فضای نامهای زیر را وارد کنید
C #

using System.Data.SqlClient;
using System.Configuration;
using System.Data;

VB.Net

Imports System.Data.SqlClient
Imports System.Configuration
Imports System.Data

اتصال GridView با داده ها
کد زیر روش ذخیره شده را اجرا می کند و داده ها را به کنترل GridView ASP.Net متصل می کند .
C #

private void GetCustomersPageWise(int pageIndex)
{
    string constring = ConfigurationManager.ConnectionStrings["constring"].ConnectionString;
    using (SqlConnection con = new SqlConnection(constring))
    {
        using (SqlCommand cmd = new SqlCommand("GetCustomersPageWise", con))
        {
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@PageIndex", pageIndex);
            cmd.Parameters.AddWithValue("@PageSize", int.Parse(ddlPageSize.SelectedValue));
            cmd.Parameters.Add("@RecordCount", SqlDbType.Int, 4);
            cmd.Parameters["@RecordCount"].Direction = ParameterDirection.Output;
            con.Open();
            IDataReader idr = cmd.ExecuteReader();
            GridView1.DataSource = idr;
            GridView1.DataBind();
            idr.Close();
            con.Close();
            int recordCount = Convert.ToInt32(cmd.Parameters["@RecordCount"].Value);
            this.PopulatePager(recordCount, pageIndex);
        }
    }
}

VB.Net

Private Sub GetCustomersPageWise(ByVal pageIndex As Integer)
    Dim constring As String = ConfigurationManager.ConnectionStrings("constring").ConnectionString
    Dim con As SqlConnection = New SqlConnection(constring)
    Dim cmd As SqlCommand = New SqlCommand("GetCustomersPageWise", con)
    cmd.CommandType = CommandType.StoredProcedure
    cmd.Parameters.AddWithValue("@PageIndex", pageIndex)
    cmd.Parameters.AddWithValue("@PageSize", Integer.Parse(ddlPageSize.SelectedValue))
    cmd.Parameters.Add("@RecordCount", SqlDbType.Int, 4)
    cmd.Parameters("@RecordCount").Direction = ParameterDirection.Output
    con.Open()
    Dim idr As IDataReader = cmd.ExecuteReader
    GridView1.DataSource = idr
    GridView1.DataBind()
    idr.Close()
    con.Close()
    Dim recordCount As Integer = Convert.ToInt32(cmd.Parameters("@RecordCount").Value)
    Me.PopulatePager(recordCount, pageIndex)
End Sub

جمع آوری Pager
در خط آخر روش فوق، ما روش زیر را شرح می دهیم تا پیکربندی Pager را کنترل کنیم. کنترل تکرار را بر اساس تعداد رکوردها از پایگاه داده استخراج می کنیم .
C #

private void PopulatePager(int recordCount, int currentPage)
{
    double dblPageCount = (double)((decimal)recordCount / decimal.Parse(ddlPageSize.SelectedValue));
    int pageCount = (int)Math.Ceiling(dblPageCount);
    List<ListItem> pages = new List<ListItem>();
    if (pageCount > 0)
    {
        pages.Add(new ListItem("First", "1", currentPage > 1));
        for (int i = 1; i <= pageCount; i++)
        {
            pages.Add(new ListItem(i.ToString(), i.ToString(), i != currentPage));
        }
        pages.Add(new ListItem("Last", pageCount.ToString(), currentPage < pageCount));
    }
    rptPager.DataSource = pages;
    rptPager.DataBind();
}

VB.Net

Private Sub PopulatePager(ByVal recordCount As Integer, ByVal currentPage As Integer)
    Dim dblPageCount As Double = CType((CType(recordCount, Decimal) / Decimal.Parse(ddlPageSize.SelectedValue)), Double)
    Dim pageCount As Integer = CType(Math.Ceiling(dblPageCount), Integer)
    Dim pages As New List(Of ListItem)
    If (pageCount > 0) Then
        pages.Add(New ListItem("First", "1", (currentPage > 1)))
        Dim i As Integer = 1
        Do While (i <= pageCount)
            pages.Add(New ListItem(i.ToString, i.ToString, (i <> currentPage)))
            i = (i + 1)
        Loop
        pages.Add(New ListItem("Last", pageCount.ToString, (currentPage < pageCount)))
    End If
    rptPager.DataSource = pages
    rptPager.DataBind()
End Sub

رویداد زیر هنگام تغییر اندازه صفحه DropDownList مطرح شده است. این روش به سادگی روش GetCustomersPageWise را می دهد .
C #

protected void PageSize_Changed(object sender, EventArgs e)
{
    this.GetCustomersPageWise(1);
}

VB.Net

Protected Sub PageSize_Changed(ByVal sender As Object, ByVal e As EventArgs)
    Me.GetCustomersPageWise(1)
End Sub

در نهایت رویداد زیر هنگامی که شماره صفحه LinkButton روی آن کلیک می شود اجرا می شود. این رویداد یک ارتباط پایگاه داده ایجاد می کند تا مجموعه ای جدید از رکوردها را بر اساس PageIndex و PageSize ایجاد کند .
C #

protected void Page_Changed(object sender, EventArgs e)
{
    int pageIndex = int.Parse((sender as LinkButton).CommandArgument);
    this.GetCustomersPageWise(pageIndex);
}

VB.Net

Protected Sub Page_Changed(ByVal sender As Object, ByVal e As EventArgs)
    Dim pageIndex As Integer = Integer.Parse(CType(sender, LinkButton).CommandArgument)
    Me.GetCustomersPageWise(pageIndex)
End Sub

عکس روی صفحه
تصویر زیرکار GridView را با استفاده از صفحه سفارشی در روش Stored SQL Server توصیف می کند

 


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

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