PDA

View Full Version : کمکم کنید . data set من خیلی بزرگ میشه (فوری)



hamed_bostan
شنبه 15 مرداد 1384, 10:18 صبح
سلام
من یه بانک sql دارم که حدود 10000 رکورد با relation و .. داره . میخوام روی اون دستور like رو پیاده سازی کنم برای search وبسایتم . ولی چون تعداد رکورد بازگشتی بعضی مواقع سر به فلک کی کشه نمی تونم توی دیتا ست بریزمش و Pagging کنم. می خوام اگه میشه راهنماییم کنید که وقتی تعداد رکورد زیاد باشه و دیتا گرید داشته باشم واسه Pagging باید چی کار کنم؟؟؟ ممنون

omid_Ahmadi
شنبه 15 مرداد 1384, 11:19 صبح
خوب خودتون paging رو به صورت دستی و با کد انجام بدید. یعنی دستورات SQL رو طوری تولید کنید که هر بار تعداد خاصی از نتایج مورد نظر شما رو از جدول استخراج کنه. (میتونید از دستور TOP در SELECT استفاده کنید)

Behrouz_Rad
شنبه 15 مرداد 1384, 12:32 عصر
به عنوان یک استاندارد طراحی صفحات وب به وسیله ASP.NET، به منظور نمایش اطلاعات باید از کنترل Repeater استفاده کنید نه DataGrid.
کارهای زیر را قدم به قدم انجام دهید:
1) ابتدا باید یک پروسیجر برای چاپ لینک ها ایجاد کنید. این پروسیجر، یک آرگومان ورودی خواهد داشت که تعداد رکوردها را دریافت کرده و بر مبنای آنها، لینک ها را ایجاد می کند.


Public Sub LinkLoop(ByVal NumRow As Int32)

Dim NumPage As Int32
NumPage = NumRow \ 10
If NumRow Mod 10 <> 0 Then NumPage += 1
For CounterX As Int32 = 1 To NumPage
Response.Write("Ta runat=""server"" href='Default.aspx?Page=" & CounterX & "'T" & CounterX & "&nbsp;" & "T/aT")
Next
End Sub

حروف T را با علامت بزگتر-کوچکتر جایگزین کنید.
به منظور بازیابی تعداد رکوردها، باید یک Command ایجاد کنید و با استفاده از دستور اس کیو ال (*)Count و نوشتن شرط جستجو در مقابل عملگر Where و با برابر قرار دادن متد ExecuteScalar شی Command با متغیری سرتاسری از نوع Int32، تعداد رکورها را به دست آورید.
در ادامه....
تعریف متغیری از نوع Int32 به منظور نگهداری شماره صفحه جاری:


Dim curPage As Int32

چک برای Query String و مقدار دهی به متغیر curPage


If Not Request.QueryString("Page") Is Nothing Then
curPage = Convert.ToInt32(Request.QueryString("Page"))
Else
curPage = 1
End If

کار اصلی ما از اینجا شروع خواهد شد...
شی DataAdapter، در Overload ششم خود، دارای امکانی است که به برنامه نویس اجازه استخراج اطلاعات از رکوردی تا رکورد دیگر را می دهد.
به دست آوردن رکورد شروع:


Dim startRecord As Int32 = (curPage - 1) * 10

پر کردن DataSet با بازیابی محدوده مورد نظر از رکوردها:


myAdapter.Fill(myDataSet, startRecord, 10, "myTable")

بایند کردن Repeater


Repeater1.DataSource = myDataSet
Repeater1.DataBind()

نحوه چاپ لینک ها در aspx


<% LinkLoop(NumRec) %>


موفق باشید.

Did_Taze
جمعه 29 شهریور 1387, 03:01 صبح
دوست عزیز ممکنه به من بگید جستجوئی که خروجی آن چندین صفحه میباشد آیا کاربری مناسب و نتیجه مناسبی برای استفاده کننده دارد ؟! بهتر است هرگز کاری نکنید که خروجی یک جستجو تعداد زیادی رکورد باشد زیرا استفاده کننده را دچار مشک مینماید . موفق باشید

Neo Persian
جمعه 29 شهریور 1387, 12:51 عصر
به عنوان یک استاندارد طراحی صفحات وب به وسیله ASP.NET، به منظور نمایش اطلاعات باید از کنترل Repeater استفاده کنید نه DataGrid.


در اين مورد ميشه بيشتر توضيح بدين؟

asgari2005
جمعه 29 شهریور 1387, 13:06 عصر
مشكل اساسي كه dataGrid دارد اين مي باشد تمامي ركوردها را در هر صفحه مي خواند و فقط همان تعداد ركوردها را نمايش مي دهد در صورتي كه همان طور بهروز خان گفتند بهتر هستش از Repeater استفاده كنيد و خودتون داستان صفحه به صفحه كردن را مديريت كنيد

Neo Persian
جمعه 29 شهریور 1387, 16:28 عصر
خوب اين مورد رو كه در gridview هم ميشه كنترل كرد بستگي به نحوه گرفتن اطلاعات از ديتابيس داره

ايشون گفتن استاندارد طراحي صفحات وب ، فكر كنم به خاطر اينكه gridview پس از render تبديل به table ميشه و البته سرعت render ريپيتر بالاتر از gridview هست

به هر حال اميدوارم ايشون ادامه تاپيك رو ببينن و موردي كه گفتن رو توضيح بدن

shocraneh
یک شنبه 22 آذر 1388, 18:44 عصر
من دقیقا کارهایی که آقای راد فرمودند رو انجام دادم به استثنای قسمت قرمز رنگ (نمی دونستم به صورت تگ چه طوری بنویسم).اما ریپیترمن هیچی نشون نمیده و صرفا یه عدد یک رو صفحه میاد که با کلیک روی اون اتفاق ی نمیفته .



Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim obj As New BLLproject
Dim NumRec As Int32 = obj.GetTotalOrders
LinkLoop(NumRec)

If Not Request.QueryString("Page") Is Nothing Then
curPage = Convert.ToInt32(Request.QueryString("Page"))
Else
curPage = 1
End If

Dim startRecord As Int32 = (curPage - 1) * 10

Dim ds As DataSet = obj.Grid(startRecord)
Repeater1.DataSource = ds
Repeater1.DataBind()

End Sub

Behrouz_Rad
یک شنبه 22 آذر 1388, 19:19 عصر
اون روش قدیمی شده. در مورد Paging جستجو کنید. تعداد زیادی تاپیک پیدا می کنید.

موفق باشید.