PDA

View Full Version : سوال: صفحه صفحه کردن datagrid



payman_np
دوشنبه 24 فروردین 1388, 20:00 عصر
با عرض سلام

چه طور میشه وقتی می خواهیم اطلاعاتی رو توی دیتاگریو نشان بدهیم که تعدادشان زیاد باشد ، دیتاگرید رو صفحه بندی کرد و مثلا هر دفعه 15 تا رکورد را نشان دهد ( شبیه به اینترنت ) و با دکمه صفحه بعد رو نشان بدهد.:متفکر:

payman_np
سه شنبه 25 فروردین 1388, 08:56 صبح
,واقعا کسی جواب رو نمی دونه؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟
؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟///:گیج:

sjhosseini
سه شنبه 25 فروردین 1388, 23:59 عصر
این کدها را تو ماژول بنویس

Module Pageing

Public DataTableSource As New DataTable()
Public DataTableMoshtagh As New DataTable()
Public RowsCount As Integer
Public StartRows As Integer
Public EndRows As Integer
Private RowsPerPage As Integer = 15

Public Function FirstPage(ByVal dt As DataTable) As DataTable
DataTableSource = dt
RowsCount = DataTableSource.Rows.Count
DataTableMoshtagh = DataTableSource.Clone
StartRows = 0
If (RowsCount >= RowsPerPage) Then
EndRows = RowsPerPage
Else
EndRows = RowsCount
End If
Return LoadData(StartRows, EndRows)
End Function

Public Function LoadData(ByVal st As Integer, ByVal en As Integer) As DataTable
DataTableMoshtagh.Rows.Clear()
Dim i, j As Integer
For i = 0 To (en - st) - 1
DataTableMoshtagh.Rows.Add()
For j = 0 To DataTableSource.Columns.Count - 1
DataTableMoshtagh.Rows(i)(j) = DataTableSource.Rows(st)(j)
Next
st += 1
Next
Return DataTableMoshtagh
End Function

Public Function NextPage() As DataTable
If ((EndRows = RowsPerPage - 1) Or ((EndRows >= RowsCount))) Then
Return LoadData(StartRows, EndRows)
End If

If ((EndRows + RowsPerPage) <= RowsCount) Then
StartRows = EndRows
EndRows += RowsPerPage
Else
StartRows = EndRows
EndRows = StartRows + (RowsCount - EndRows)
End If

Return LoadData(StartRows, EndRows)
End Function

Public Function BackPage() As DataTable
If (StartRows = 0) Then
Return LoadData(StartRows, EndRows)
End If

If ((EndRows - StartRows) <= RowsPerPage) Then
EndRows = StartRows
StartRows -= RowsPerPage
Else
EndRows -= 1
StartRows -= 10
End If

Return LoadData(StartRows, EndRows)
End Function

End Module

این کد رو توی فرم لود بنویس

DataGridView1.DataSource = FirstPage(dt)

این کد رو برای کلیک Next

DataGridView1.DataSource = NextPage()

این کد رو برای کلیک دکمه Back

DataGridView1.DataSource = BackPage()

juza66
چهارشنبه 17 فروردین 1390, 01:29 صبح
کار نداد ولی دست درد نکنه
اگه تونستی اصلاحش کنی ممنون میشم:قلب:

milad.biroonvand
چهارشنبه 17 فروردین 1390, 06:13 صبح
بنظرم ، یکی از راه ها استفاده از تابع top اس کیو ال هست که کمکت می کنه ، یکی با استفاده از دیتاست ، شما باید ، ابتدا تعداد صفحه رو بدست بیاورید که اینکار برات ذو حالت پیش میاد ، برای پیدا کردن از فرمول زیر استفاده کن

اگر تعاد صفحه تقسیم بر تعداد نمایش در صفحه مساوی صفر بود
تعداد صفحه = تعداد کل داده ها / تعداد قابل نمایش در هر صفحه تقسیم
در غیر اینصورت

تعداد صفحه = تعداد کل داده ها / تعداد قابل نمایش در هر صفحه تقسیم + 1

اول یه سرچ کامل بر روی اطلاعاتت بزن و تعداد اون ها رو بدست بیار بعد طبق این فرمول دکمه های بعد و قبل رو طراحی کن .

shadi khanum
چهارشنبه 17 فروردین 1390, 10:49 صبح
یه Sample واستون نوشتم که اسم سرور و دیتابیس و جدولی که میخواین نشون بده تو گرید رو میگیره و صفحه به صفحه (4تا ردیف تو هر صفحه مثلا)نشون میده با Next و Back به صفحه قبلی و بعدی میره ولی نمیدونم چرا تو سایت نمیشه upload کرد. میخواید آدرس ایمیلتون رو بدین تا بفرستم واستون

omid-vbAuto
چهارشنبه 17 فروردین 1390, 12:26 عصر
این کدها را تو ماژول بنویس

Module Pageing

Public DataTableSource As New DataTable()
Public DataTableMoshtagh As New DataTable()
Public RowsCount As Integer
Public StartRows As Integer
Public EndRows As Integer
Private RowsPerPage As Integer = 15

Public Function FirstPage(ByVal dt As DataTable) As DataTable
DataTableSource = dt
RowsCount = DataTableSource.Rows.Count
DataTableMoshtagh = DataTableSource.Clone
StartRows = 0
If (RowsCount >= RowsPerPage) Then
EndRows = RowsPerPage
Else
EndRows = RowsCount
End If
Return LoadData(StartRows, EndRows)
End Function

Public Function LoadData(ByVal st As Integer, ByVal en As Integer) As DataTable
DataTableMoshtagh.Rows.Clear()
Dim i, j As Integer
For i = 0 To (en - st) - 1
DataTableMoshtagh.Rows.Add()
For j = 0 To DataTableSource.Columns.Count - 1
DataTableMoshtagh.Rows(i)(j) = DataTableSource.Rows(st)(j)
Next
st += 1
Next
Return DataTableMoshtagh
End Function

Public Function NextPage() As DataTable
If ((EndRows = RowsPerPage - 1) Or ((EndRows >= RowsCount))) Then
Return LoadData(StartRows, EndRows)
End If

If ((EndRows + RowsPerPage) <= RowsCount) Then
StartRows = EndRows
EndRows += RowsPerPage
Else
StartRows = EndRows
EndRows = StartRows + (RowsCount - EndRows)
End If

Return LoadData(StartRows, EndRows)
End Function

Public Function BackPage() As DataTable
If (StartRows = 0) Then
Return LoadData(StartRows, EndRows)
End If

If ((EndRows - StartRows) <= RowsPerPage) Then
EndRows = StartRows
StartRows -= RowsPerPage
Else
EndRows -= 1
StartRows -= 10
End If

Return LoadData(StartRows, EndRows)
End Function

End Module

این کد رو توی فرم لود بنویس

DataGridView1.DataSource = FirstPage(dt)

این کد رو برای کلیک Next

DataGridView1.DataSource = NextPage()

این کد رو برای کلیک دکمه Back

DataGridView1.DataSource = BackPage()



من هم امتحان کردم .کار نمی کنه!

اگر ممکنه نمونه برنامشو بذارید.

shadi khanum
چهارشنبه 17 فروردین 1390, 13:12 عصر
این Sample رو ببینید . اول نام سرور و دیتابیس و جدولتون رو وارد کنید، دکمه fill رو بزنید و با next و Back به صفحه بعد و قبل برید

reza_edu
چهارشنبه 17 فروردین 1390, 23:20 عصر
سلام اينم يه نمونه ديگه http://barnamenevis.org/showthread.php?275728-%D9%86%D9%85%D8%A7%DB%8C%D8%B4%D9%87-%D8%B5%D9%81%D8%AD%D9%87-%D8%A8%D9%87-%D8%B5%D9%81%D8%AD%D9%87-%D8%AF%D8%B1-%D8%AF%DB%8C%D8%AA%D8%A7%DA%AF%D8%B1%DB%8C%D8%AF-%D9%88%DB%8C%D9%88-Paging-in-DataGridView&p=1218273&highlight=#post1218273
البته اين روش كه بكار بردم بهترين نيست ولي بازم جواب ميده اگه ميخواي بهينه باشه تو خود اسكيوال بصورت صفحه به صفحه ارسال كن اگه راهنمائي خواستي پيام خصوصي بده متوحه بشم.