ساخت گریدویو با صفحه بندی سفارشی

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

گاهی اوقات شما نیاز دارید که داده ها را در گریدویو نمایش دهید در حالی که آن داده شامل رکوردی نباشد. اگر تمامی داده ها را در یک زمان بخواهید نمایش دهید زمان زیادی می برد همچنین ممکن است با پیغام timed out error in application مواجه شوید. زمانی که ما نیاز به نمایش تنها تعدادی از رکوردها در گریدویو داریم و جداول بانک اطلاعاتی ما شامل رکوردی نیست پس بهتر است از صفحه بندی سفارشی به جای صفحه بندی پیش فرض استفاده نماییم.

Stored Procedure

CREATEPROCEDUREGetAll_Employees  
@pageIndexint,  
@pageSizeint,  
@totalRecordsintOUTPUT  
-- EXEC GetAll_Employees 1, 100,@totalRecords OUTPUT;PRINT @totalRecords  
AS  
BEGIN  
  
SELECT@totalRecords=COUNT(EmpID)FROMdbo.Employees  
SelectEmpID,EmpName,Desigantion,Address,Cityfrom  
(  
Select  
Row_number()over(OrderbyEmpIDASC)asRowNo,  
EmpName,Desigantion,Address,City  
FROMdbo.Employees  
  
)ASEmp  
Where  
Emp.RowNobetween((@pageIndex- 1)*@pageSize)+ 1 and(@pageIndex*@pageSize)  
OrderbyEmpIDASC  
END 

دیزاین گریدویو

    <asp:GridViewIDasp:GridViewID="grdEmployee"runat="server"AutoGenerateColumns="false">  
        <Columns>  
            <asp:BoundFieldHeaderTextasp:BoundFieldHeaderText="EmpID"DataField="EmpID"/>  
            <asp:BoundFieldHeaderTextasp:BoundFieldHeaderText="EmpName"DataField="EmpName"/>  
            <asp:BoundFieldHeaderTextasp:BoundFieldHeaderText="Address"DataField="Address"/>  
            <asp:BoundFieldHeaderTextasp:BoundFieldHeaderText="City"DataField="City"/>  
        </Columns>  
    </asp:GridView>  
    <br/>  
    <asp:RepeaterIDasp:RepeaterID="rptPager"runat="server">  
        <ItemTemplate>  
            <asp:LinkButtonCssClassasp:LinkButtonCssClass="abc"ID="lnkPage"runat="server"Text='<%#Eval("Text") %>'CommandArgument='<%# Eval("Value") %>'Enabled='<%# Eval("Enabled") %>'OnClick="Page_Changed">  
            </asp:LinkButton>  
        </ItemTemplate>  
    </asp:Repeater>  

پر کردن گریدویو

privatevoid BindData(int pageIndex) {  
    Int standardPageSize = 100;  
    string constring = ConfigurationManager.ConnectionStrings["Azure_ContentManifest"].ConnectionString;  
    using(SqlConnection con = newSqlConnection(constring)) {  
        using(SqlCommand cmd = newSqlCommand("GetAll_Employees", con)) {  
            cmd.CommandType = CommandType.StoredProcedure;  
            cmd.Parameters.AddWithValue("@pageIndex", pageIndex);  
            cmd.Parameters.AddWithValue("@pageSize", standardPageSize);  
            cmd.Parameters.Add("@totalRecords", SqlDbType.Int, 4);  
            cmd.Parameters["@totalRecords"].Direction = ParameterDirection.Output;  
            con.Open();  
            DataReaderdr = cmd.ExecuteReader();  
            grdEmployee.DataSource = dr;  
            grdEmployee.DataBind();  
            con.Close();  
            int recordCount = Convert.ToInt32(cmd.Parameters["@totalRecords"].Value);  
            PopulatePager(recordCount, standardPageSize, pageIndex);  
        }  
    }  
} 

پرکردن Pager/Pagination

protectedvoid Page_Changed(object sender, EventArgs e) { // link button click i.e page number  
    int pageIndex = int.Parse((sender asLinkButton).CommandArgument);  
    BindData(pageIndex);  
}  
privatevoid PopulatePager(int recordCount, int pageSize, int currentPage) {  
    double dblPageCount = (double)((decimal) recordCount / (decimal) pageSize);  
    int pageCount = (int) Math.Ceiling(dblPageCount);  
  
    List < ListItem > pages = newList < ListItem > ();  
    if (pageCount > 0) {  
        pages.Add(newListItem("First", "1", currentPage > 1));  
        for (int i = 1; i <= pageCount; i++) {  
            if ((i % 10 == 0)) {  
                pages.Add(newListItem("...", i.ToString(), i != currentPage));  
                break;  
  
            }  
            pages.Add(newListItem(i.ToString(), i.ToString(), i != currentPage));  
        }  
        pages.Add(newListItem("Last", pageCount.ToString(), currentPage < pageCount));  
    }  
    rptPager.DataSource = pages;  
    rptPager.DataBind();  
} 

شکل 1 : بارگذاری 10 صفحه اول

شکل 2 : بارگذاری 10 رکورد بعدی