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

دوشنبه 29 تیر 1394

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

گاهی اوقات شما نیاز دارید که داده ها را در گریدویو نمایش دهید در حالی که آن داده شامل رکوردی نباشد. اگر تمامی داده ها را در یک زمان بخواهید نمایش دهید زمان زیادی می برد همچنین ممکن است با پیغام 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 رکورد بعدی

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید