PDA

View Full Version : نمایش تعداد مشخصی از رکوردها در گرید ویو



sara_aryanfar
سه شنبه 24 آبان 1390, 23:14 عصر
با سلام فرض کنید ما 1000 رکورد در جدول خودمون داریم و می خواهیم اینا رو به صورت 10 تایی نوشون بدیم یعنی در هر صفحه گرید ویو 10 خبر باشه البته در چندین تاپیککی که من جستجو کردم اشاره شده بود در استفاده از پیجینگ خود گرید ویو همه رکوردها فراخوانی میشه و این سرعت کار رو پائین میاره من می خوام همون 10 تا خونده بشه و وقتی کاربر روی عدد 2 کلیک می کنه 10 تا رکورد بعدی خونده بشه

fakhravari
چهارشنبه 25 آبان 1390, 00:06 صبح
با سلام
معلوم خوب سرچ نکردید.
خود گرید pagin داره

sara_aryanfar
چهارشنبه 25 آبان 1390, 00:29 صبح
من می دونم پیجینگ داره بحث اینجاست که آیا دیتا گرید همه رکوردها رو فرا می خونه ؟

fakhravari
چهارشنبه 25 آبان 1390, 01:01 صبح
خوب شما هم دارید میگید
10 اول نمایش میده .
ولی فکر نکن فشاری بیاد به سرور چون select top 10 داره

Saman Hashemi
چهارشنبه 25 آبان 1390, 11:50 صبح
ولی فکر نکن فشاری بیاد به سرور چون select top 10 داره
در گرید هر بار شما تمام اطلاعات فراخوانی میکنید و گرید با توجه به صفحه ای که درخواست کردی ،تعداد رکورد مدنظر شما نمایش میده برای اینکار اگر اشتباه نکنم آقای دیندار تاپیکی ایجاد کرده بودند و یه شیوه بهتر ارائه داده بودند بگردید پیدا میکنید...!

sara_aryanfar
چهارشنبه 25 آبان 1390, 23:44 عصر
من که جستجو کردم آقای دینداری پیدا نکردم حالا راه ساده ای نیست که ما فقط 10 رکورد رو دریافت کنیم و با کلیک روی شماره صفحه بعد 10 رکورد بعدی رو

fakhravari
پنج شنبه 26 آبان 1390, 00:12 صبح
در جواب پست اخر شما.
مگه گرید ویو خودش page size نداره می توانید از آن استفاده کنید.

Saman Hashemi
پنج شنبه 26 آبان 1390, 07:22 صبح
با استفاده از sp میتونید اینکار انجام بدید ...!
لینک تاپیک آقای دیندار (http://barnamenevis.org/showthread.php?199437-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-Custom-Paging-amp-Sorting-%D8%AF%D8%B1-Sql2005-%D9%87%D9%85%D8%B1%D8%A7%D9%87-%D8%A8%D8%A7-%D9%86%D9%85%D9%88%D9%86%D9%87-%D9%83%D8%AF-%D8%A8%D8%B1%D8%A7%D9%8A-%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF&highlight=custom+paging)

aliyeh
پنج شنبه 26 آبان 1390, 08:11 صبح
پس به این نتیجه می رسیم که gridview فقط به صورت مجازی رکوردها رو صفحه بندی میکنه و در لود اولیه تمام رکوردها خونده میشه.
حالا یک سوال من یه گریدویو دارم که در خاصیت rowdatabind اون یک شرط رو چک می کنم.می خوام بدونم این تاثیری در سرعت لود شدن اطلاعاتم داره؟
آیا با صفحه بندی در سمت سرور می تونم سرعت رو بالاتر ببرم؟

Saman Hashemi
پنج شنبه 26 آبان 1390, 08:20 صبح
حالا یک سوال من یه گریدویو دارم که در خاصیت rowdatabind اون یک شرط رو چک می کنم.می خوام بدونم این تاثیری در سرعت لود شدن اطلاعاتم داره؟
بله چون روی هر رکورد این شرط بررسی میشه و در تعداد رکورد های بالا محسوس میشه...!

آیا با صفحه بندی در سمت سرور می تونم سرعت رو بالاتر ببرم؟
به نظرم اگر سمت بانک انجام بشه بهتر است...!

sara_aryanfar
پنج شنبه 26 آبان 1390, 18:32 عصر
با تشکر در لینکی که داده بودین لینک دانلود برنامه خراب بود

rahmatr
پنج شنبه 26 آبان 1390, 20:35 عصر
اول اینکه شکل دستور گرفتن رکوردهای n ام تا m ام در Sql Server به این صورت است :

فرض کنید Tableی داریم به اسم tblUser و میخواهیم رکوردهای 11 تا 20 اون شامل فیلدهای idUser و UserName را بگیریم:

WITH temp AS
(select ROW_NUMBER() OVER (ORDER BY idUser) AS RowNumber, idUser, UserName from tblUser)
SELECT * FROM temp WHERE RowNumber BETWEEN 11 AND 20


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

یک روش ساده که این دردسرها را ندارد، اینجا توضیح داده شده :
http://msdn.microsoft.com/en-us/library/aa479347.aspx

bardizad
جمعه 27 آبان 1390, 19:21 عصر
دوست عزیز یه راه خیلی ساده که بنظرم میرسه و شاید خواسته شما رو برآورده کنه استفاده از QueryString است فرض کنید که میخواهید اطلاعات Product از دیتابیس Northwind رو در یه گرید نمایش بدید آونم به صورتی که هر بار این گرید 10 تا از رکوردها رو نمایش بده و از Enity FrameWork هم استفاده کردیم ( که اصلا مهم نیست و شما میتونید از هر تکنیک دیگه ایی استفاده کنید ) من تو رویداد لود Page مینویسم:
protected void Page_Load(object sender, EventArgs e)
{
NorthwindEntities db = new NorthwindEntities();
int rowNumber = Convert.ToInt32(Request.QueryString["Row"]);
var query = from p in db.Products
where p.CategoryID>2
orderby p.ProductName
select p;

grdNorth.DataSource = query.Skip(rowNumber).Take(10);
DataBind();
}
امیدوارم منظورتون رو برآورده کرده باشه اگه نه در تماس باشید در خدمتم