PDA

View Full Version : هندل کردن صفحات در GridView



Developer Programmer
دوشنبه 21 تیر 1389, 23:16 عصر
وقتی تعداد سطرهای GridView زیاد باشه، اتوماتیک اونرو صفحه بندی میکنه. چطور میشه ادامه رکوردها رو در صفحه بعد دید؟

Developer Programmer
چهارشنبه 23 تیر 1389, 21:07 عصر
من از این کد واسه افزودن GridView استفاده کردم

<asp:GridView ID="GridList" runat="server" AllowPaging="true" >
<RowStyle CssClass="RowStyle" />
<PagerStyle CssClass="PagerStyle" />
<SelectedRowStyle CssClass="SelectedRowStyle" />
<HeaderStyle CssClass="HeaderStyle" />
<EditRowStyle CssClass="EditRowStyle" />
<AlternatingRowStyle CssClass="AltRowStyle" />
</asp:GridView>


و این کد رو واسه خوندن رکوردها


Inherits System.Web.UI.Page

Dim csDataBase As New ClassDataBase()

Public Sub RefreshDataGrid()
Dim Query As String = ""
Query = "Select f.BillID as [شماره فیش],BillDate as [تاریخ سفارش],"
Query &= "TotalPrice as [مبلغ کل],ServicePrice as [هزینه سرویس],DiscountPrice as [تخفیف],"
Query &= "[قابل پرداخت]=TotalPrice+ServicePrice-DiscountPrice ,"
Query &= "StaffName as [نام پیک],'وضعیت فیش'= case when Deleted=1 then 'ابطال' else 'عادی' end ,"
Query &= "f.UserName as [نام کاربر],CustomerName as [نام مشتری]"
Query &= " from (((factor f "
Query &= " inner join users u on f.UserName=f.UserName)"
Query &= " Left join Customer c on c.CustomerID=f.CustomerID)"
Query &= " Left Join Staff s on f.StaffID=s.StaffID)"
csDataBase.BindDataGrid(GridList, Query)

label1.Text = "تعداد کل موارد پیدا شده:" & FarsiLibrary.Utils.ToWords.ToString(GridList.Rows. Count) & " مورد "
End Sub

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
'search
RefreshDataGrid()
End If
End Sub

Protected Sub btnOK_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnOK.Click
'Search
RefreshDataGrid()
End Sub

Protected Sub GridList_PageIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles GridList.PageIndexChanged
If Not Page.IsPostBack Then Response.Write("Page " & (GridList.PageIndex + 1).ToString() & " of " & GridList.PageCount.ToString() & ".")
End Sub

Protected Sub GridList_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles GridList.PageIndexChanging
If Not Page.IsPostBack Then Response.Write("Page " & (GridList.PageIndex + 1).ToString() & " of " & GridList.PageCount.ToString() & ".")
End Sub


همه چیز درست کار میکنه منتها وقتی روی GridView شماره صفحه رو کلیک میکنم دوباره برمیگرده به Page 1 و نمیدونم چیکارش کنم.

Mostafa_Dindar
پنج شنبه 24 تیر 1389, 02:17 صبح
من از این کد واسه افزودن GridView استفاده کردم

<asp:GridView ID="GridList" runat="server" AllowPaging="true" >
<RowStyle CssClass="RowStyle" />
<PagerStyle CssClass="PagerStyle" />
<SelectedRowStyle CssClass="SelectedRowStyle" />
<HeaderStyle CssClass="HeaderStyle" />
<EditRowStyle CssClass="EditRowStyle" />
<AlternatingRowStyle CssClass="AltRowStyle" />
</asp:GridView>


و این کد رو واسه خوندن رکوردها


Inherits System.Web.UI.Page

Dim csDataBase As New ClassDataBase()

Public Sub RefreshDataGrid()
Dim Query As String = ""
Query = "Select f.BillID as [شماره فیش],BillDate as [تاریخ سفارش],"
Query &= "TotalPrice as [مبلغ کل],ServicePrice as [هزینه سرویس],DiscountPrice as [تخفیف],"
Query &= "[قابل پرداخت]=TotalPrice+ServicePrice-DiscountPrice ,"
Query &= "StaffName as [نام پیک],'وضعیت فیش'= case when Deleted=1 then 'ابطال' else 'عادی' end ,"
Query &= "f.UserName as [نام کاربر],CustomerName as [نام مشتری]"
Query &= " from (((factor f "
Query &= " inner join users u on f.UserName=f.UserName)"
Query &= " Left join Customer c on c.CustomerID=f.CustomerID)"
Query &= " Left Join Staff s on f.StaffID=s.StaffID)"
csDataBase.BindDataGrid(GridList, Query)

label1.Text = "تعداد کل موارد پیدا شده:" & FarsiLibrary.Utils.ToWords.ToString(GridList.Rows. Count) & " مورد "
End Sub

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
'search
RefreshDataGrid()
End If
End Sub

Protected Sub btnOK_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnOK.Click
'Search
RefreshDataGrid()
End Sub

Protected Sub GridList_PageIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles GridList.PageIndexChanged
If Not Page.IsPostBack Then Response.Write("Page " & (GridList.PageIndex + 1).ToString() & " of " & GridList.PageCount.ToString() & ".")
End Sub

Protected Sub GridList_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles GridList.PageIndexChanging
If Not Page.IsPostBack Then Response.Write("Page " & (GridList.PageIndex + 1).ToString() & " of " & GridList.PageCount.ToString() & ".")
End Sub


همه چیز درست کار میکنه منتها وقتی روی GridView شماره صفحه رو کلیک میکنم دوباره برمیگرده به Page 1 و نمیدونم چیکارش کنم.

سلام ,
لازم نیست اینهمه خودتون رو اذیت کنید ,

شما از متد
csDataBase.BindDataGrid(GridList, Query)
برای Fill کردن GridView استفاده کرده اید که مشخص نشده چه نوع داده رو به گرید ویو انتصاب میده .

برای اینکه GridView عمل Paging رو انجام بده , شما 2 راه حل اصلی پیش روی دارید :

1- DataSet برگردونید و به GridView انتنصاب بدید . در این حالت کافیه که خصوصیت AllowPaging در گریدویو رو مقدار True بدید .
در این حالت شما ClientSide عمل paging رو انجام میدید که برای داده های کم بهینه هست .

نکته : نوع برگشتی پیش فرض SqlDataSource از نوع DataSet هست .

2 - در صورتی که رکوردهای شما زیاد است , بهتر است که Custom Paging رو انجام بدید که من به تفصیل در اینجا (http://www.barnamenevis.org/forum/showthread.php?t=199437)توضیح داده ام .

موفق باشید .

Developer Programmer
پنج شنبه 24 تیر 1389, 10:10 صبح
با تشکر از وقتی که گذاشتین


برای Fill کردن GridView استفاده کرده اید که مشخص نشده چه نوع داده رو به گرید ویو انتصاب میده



Public Function BindDataGrid(ByVal DataGrid As GridView, ByVal Query As String) As Boolean
If Not OpenDB() Then Return False
Dim DataAdapter As New SqlDataAdapter()
Dim ds As New DataSet()
Try
With DataAdapter
.SelectCommand = New SqlCommand()
.SelectCommand.Connection = Connection
.SelectCommand.CommandText = Query
ds.Clear()
.Fill(ds, "table")
End With

With DataGrid
.DataSource = ds
.DataMember = "table"
.DataBind()
End With

CloseDB()
Return True
Catch ex As Exception
Return False
End Try
End Function

Mostafa_Dindar
پنج شنبه 24 تیر 1389, 11:11 صبح
همانطور که قبلا گفتم , چون دیتاست انتصاب دادین , کافیه تنها پراپرتی AllowPaging رو مقدار True بدین . یعنی خطوط 32 تا 39 غیر لازم هستند .

Developer Programmer
پنج شنبه 24 تیر 1389, 13:42 عصر
با تشکر از وقتی که گذاشتین


یعنی خطوط 32 تا 39 غیر لازم هستند
وقتی این دو Event رو هندل نمیکنم. با رفتن به صفحه بعدی، Exception اتفاق میافته مبنی بر اینکه فلان Event اتفاق افتاده ولی متدی براش نوشته نشده!!!
وقتی هم که این دو Event رو هندل میکنم. با کلیک برروی صفحه بعدی، دوباره همون اطلاعات صفحه یک Load میشه و به صفحه بعدی نمیره.