PDA

View Full Version : جستجو در دیتاگرید صفحه بندی شده



nafisehk
چهارشنبه 03 مهر 1392, 23:28 عصر
سلام

وقتی با صفحه بندی رکوردارو تو دیتاگرید میاریم همه داده ها تو دیتاگرید نیست، پس باید تو دیتابیس سرچ کرد؟
اگه رکوردا خیلی زیاد باشن کند میشه:|

nafisehk
پنج شنبه 04 مهر 1392, 00:45 صبح
دوستان لطفا راهنمایی بفرمایید. مرسیییی

naghshineh m&h
پنج شنبه 04 مهر 1392, 01:14 صبح
لطفا کامل تر و با مثال توضیح دهید

nafisehk
پنج شنبه 04 مهر 1392, 10:57 صبح
صفحه بندی برای اینکه همه رکوردا لود نشن تو فرم(سرعت پایین نیاد)- برای اینکار هر سری یک تعدادی از رکوردها لود میشن- پس ما همه رکوردارو تو یه دیتاتیبل یا دیتاگرید نداریم و اگه سرچ کنیم روی همین اطلاعاتی که تا اون لحظه خونده شده سرچ میکنه نه همه داده ها- برای سرچ باید از دیتابیس سرچ کرد؟ با توجه به اینکه سرعت سرچ باید بالا باشه.
دوستان ممنون میشم راهنمایی بفرمایید

hamid_hr
پنج شنبه 04 مهر 1392, 11:16 صبح
يه سوال
هر صفحه رو به صورت جدا لود ميكني؟
يعني صفحه ي بعدي كه بزنه ميري از ديتابيس اونو ميخوني ميريزي تو ديتاگريد ويو؟

nafisehk
پنج شنبه 04 مهر 1392, 11:27 صبح
يه سوال
هر صفحه رو به صورت جدا لود ميكني؟
يعني صفحه ي بعدي كه بزنه ميري از ديتابيس اونو ميخوني ميريزي تو ديتاگريد ويو؟


بله . روش دیگه ای هم هست که بهتر باشه؟

hamid_hr
پنج شنبه 04 مهر 1392, 11:37 صبح
خب اينطوري مجبوري برا سرچ به ديتابسي مراجعه كني
ميتوني همه اطلاعاتو بياري داخل يك ديتاتيبل بريزي
هر صفحه كه رفت اطلاعات مربوط به همون صفحه رو لود كني از داخل ديتا تيبل
برا سرچم از داخل همون ديتا تيبل سرچ ميكني

nafisehk
پنج شنبه 04 مهر 1392, 12:01 عصر
خب اينطوري مجبوري برا سرچ به ديتابسي مراجعه كني
ميتوني همه اطلاعاتو بياري داخل يك ديتاتيبل بريزي
هر صفحه كه رفت اطلاعات مربوط به همون صفحه رو لود كني از داخل ديتا تيبل
برا سرچم از داخل همون ديتا تيبل سرچ ميكني

اینجوری باشه که دیگه صفحه بندی نیاز نیس سورس دیتا گرید و همون دیتاتیبل میزارم همونم سرچ میزنم:|

hamid_hr
پنج شنبه 04 مهر 1392, 12:07 عصر
خب صفحه بندي رو انجام ميدن برا دسته بندي اطلاعات
مثلا گوگل
اگه قرار باشه همه اطلاعاتو تو يك صفحه بياره چي ميشه خب هر 20 تاشو ميزاره تو يك صفحه

nafisehk
پنج شنبه 04 مهر 1392, 12:15 عصر
خب صفحه بندي رو انجام ميدن برا دسته بندي اطلاعات
مثلا گوگل
اگه قرار باشه همه اطلاعاتو تو يك صفحه بياره چي ميشه خب هر 20 تاشو ميزاره تو يك صفحه

برای دسته بندی یا برای اینکه با خوندن تعداد زیادی رکورد سرعت پایین نیاد!؟

hamid_hr
پنج شنبه 04 مهر 1392, 12:29 عصر
دسته بندي فك كنم منظور اصليش باشه

nafisehk
پنج شنبه 04 مهر 1392, 12:39 عصر
دسته بندي فك كنم منظور اصليش باشه

بالا بردن سرعت فکر کنم منظور اصلیش باشه:)

veniz2008
پنج شنبه 04 مهر 1392, 12:54 عصر
سلام.
بحث دسته بندی مطرح نیست.
هدف اصلی از صفحه بندی، افزایش سرعت هنگام بارگذاری اطلاعات و استفاده بهینه از منابع سیستم هست.
لود کردن 30 رکورد قطعا رم خیلی کمتری رو نسبت به لود کردن یکباره 5000 رکورد داره. در یک زمان واحد مطمئن باشید که نمایش یکباره تعداد زیادی رکورد به درد نمیخوره و کار بهینه ای نیست.
در مورد سوال شما : کاش منظورتون رو بیشتر توضیح بدید. دقیقا در پروژه چه کاری رو دارید انجام می دید؟ شاید بشه راه بهتری رو پیشنهاد داد.

nafisehk
پنج شنبه 04 مهر 1392, 13:05 عصر
سلام.
بحث دسته بندی مطرح نیست.
هدف اصلی از صفحه بندی، افزایش سرعت هنگام بارگذاری اطلاعات و استفاده بهینه از منابع سیستم هست.
لود کردن 30 رکورد قطعا رم خیلی کمتری رو نسبت به لود کردن یکباره 5000 رکورد داره. در یک زمان واحد مطمئن باشید که نمایش یکباره تعداد زیادی رکورد به درد نمیخوره و کار بهینه ای نیست.
در مورد سوال شما : کاش منظورتون رو بیشتر توضیح بدید. دقیقا در پروژه چه کاری رو دارید انجام می دید؟ شاید بشه راه بهتری رو پیشنهاد داد.


1 جدول درام که تعداد رکورداش بالاس. برای لود رکوردا تو گرید از صفحه بندی استفاده میکنم. یعنی اول 100 تا رکورد میخونه کاربر دکمه Next و زد 100 تای بعدی میخونه ...
پس همه رکوردام و تو دیتاگرید ندارم وقتی میخوام سرچ کنم باید از جدولی که تو دیتابیس هست سرچ کنم میخوام ببینم روش دیگه وجود داره یا نه؟

nafisehk
پنج شنبه 04 مهر 1392, 13:37 عصر
تست نکردم اما فک میکنم اگه از صفحه بندی برای سرچ هم استفاده کنم مشکل تا حدودی حل میشه.... اما چوت کارکتر به کارکتر سرچ میکنه به ازای هر کارکتر باید از جدل سرچ کنه...

اساتید لطفا راهنمایی بفرمایید

veniz2008
پنج شنبه 04 مهر 1392, 18:10 عصر
تست نکردم اما فک میکنم اگه از صفحه بندی برای سرچ هم استفاده کنم مشکل تا حدودی حل میشه.... اما چوت کارکتر به کارکتر سرچ میکنه به ازای هر کارکتر باید از جدل سرچ کنه...

اساتید لطفا راهنمایی بفرمایید
اگر نتیجه جستجوی شما، شامل رکوردهای زیادی هست، باز هم بهتره که از همون صفحه بندی کمک بگیرید.
منظورتون رو از کاراکتر به کاراکتر متوجه نشدم. شاید منظورتون اینه که مثلا در رویداد textchange یک textbox عمل جستجو رو انجام می دید. این خاصیت باید در جای مناسب خودش استفاده بشه و اگر قرار باشه برای هر کاراکتر تعداد انبوهی از رکوردها در سمت دیتابیس مقایسه بشه تا نتیجه رو پیدا کنه ممکنه روی performance برنامه شما تاثیر منفی بذاره.

mousa1992
پنج شنبه 04 مهر 1392, 20:25 عصر
شما مسئله سرچ رو واگذار کن به سیستم مدیریت پایگاه دادتون نگرانش نباش برا سرچ طولی نمیکشه ( البته اگه با داده های زیاد سروکار داشته باشین بهتره که index گذاری کنید - بهتر که چه عرض کنم حتما این کارو کن :) )

behnam-soft
پنج شنبه 04 مهر 1392, 20:41 عصر
خب شما چرا نمیای اول از همه، کل اطلاعات رو در یه دیتا تیبل اولیه بریزی، بعد مثلا 50 تا رکورد اول در یه دیتا تیبل دیگه بریزی رو در دیتا گرید نشون بدی، بعد تعداد بعدی و ...اماقسمت سرچت رو در دیتا تیبل اصلی متمرکز کن!
البته اگر این روش من مشکلی داره، اساتید بفرمایند.

veniz2008
پنج شنبه 04 مهر 1392, 20:48 عصر
خب شما چرا نمیای اول از همه، کل اطلاعات رو در یه دیتا تیبل اولیه بریزی، بعد مثلا 50 تا رکورد اول در یه دیتا تیبل دیگه بریزی رو در دیتا گرید نشون بدی، بعد تعداد بعدی و ...اماقسمت سرچت رو در دیتا تیبل اصلی متمرکز کن!
البته اگر این روش من مشکلی داره، اساتید بفرمایند.
اگر پست ها رو به دقت میخوندید متوجه می شدید عیب این روشی که شما می گید اینه که اگر تعداد رکوردها زیاد باشه برنامه کند میشه و رم زیادی هم توسط دیتاتیبل مصرف میشه. ولی در صفحه بندی فقط به تعداد مورد نیاز رکورد برگشت داده میشه و چون رکوردهای برگشتی محدود هست پس مصرف منابع سیستم هم کاهش قابل توجهی رو داره.
موفق باشید.

nafisehk
جمعه 05 مهر 1392, 11:54 صبح
اگر نتیجه جستجوی شما، شامل رکوردهای زیادی هست، باز هم بهتره که از همون صفحه بندی کمک بگیرید.
منظورتون رو از کاراکتر به کاراکتر متوجه نشدم. شاید منظورتون اینه که مثلا در رویداد textchange یک textbox عمل جستجو رو انجام می دید. این خاصیت باید در جای مناسب خودش استفاده بشه و اگر قرار باشه برای هر کاراکتر تعداد انبوهی از رکوردها در سمت دیتابیس مقایسه بشه تا نتیجه رو پیدا کنه ممکنه روی performance برنامه شما تاثیر منفی بذاره.

بله در رویداد textchnage جستجو انجام میشه... جای مناسب کجاست؟:)

nafisehk
جمعه 05 مهر 1392, 12:55 عصر
این خاصیت باید در جای مناسب خودش استفاده بشه و اگر قرار باشه برای هر کاراکتر تعداد انبوهی از رکوردها در سمت دیتابیس مقایسه بشه تا نتیجه رو پیدا کنه ممکنه روی performance برنامه شما تاثیر منفی بذاره.

اقای موسی فکر نمیکنم سلیقه ای باشه چون میخوایم سرعت جستجو بالا بره

veniz2008
جمعه 05 مهر 1392, 14:07 عصر
بله در رویداد textchnage جستجو انجام میشه... جای مناسب کجاست؟:)
اگر تعداد رکوردهای زیادی رو در اون جدول دارید و مجبور به استفاده از رویداد textchange نیستید از این رویداد صرف نظر کنید. فرض بگیرید هدف شما تایپ یک کلمه 4 کاراکتری هست. در رویداد textchange به ناچار 3 مرتبه غیر ضروری بایستی به دیتابیس وصل و در بین تعداد زیادی رکورد جستجو انجام بشه. این کار به نظرتون معقولانه هست؟ به نظر من جز وارد کردن سربار اضافی به برنامه چیز دیگه ای نیست.
بهتر این هست زمانیکه کاربر تعداد حرف های مورد نیازش رو در ارتباط با کلمه مورد نظر وارد کرد، بعدش جستجو انجام بشه تا از عملیات اضافی جلوگیری بشه.
در کل برای تعداد رکوردهای زیاد استفاده از textchange رو پیشنهاد نمیکنم مگر در حالاتیکه ضروری باشه.
اگر فرض رو بر این بگیریم که ضروری باشه بایستی راه هایی رو که به افزایش سرعت جستجو و برگشت اطلاعات کمک میکنه رو پیاده سازی کنید. مثل :
1. استفاده از Index مناسب برای جدول. ما کلا دو نوع ایندکس داریم. یا Clustered Index که فقط میتونه برای هر جدول یک نمونه داشته باشه. بصورت پیش فرض و اتومات این نوع ایندکس روی کلید اصلی جدول قرار می گیره. این نوع ایندکس ترتیب فیزیکی رکوردها(همون چیزی که می بینم) رو تحت تاثیر قرار میده. وجود همین ایندکس هست که سرعت جستجو رو زمانیکه شرط کوئری رو بر روی فیلد اصلی میزاریم بسیار بالا هست.
نوع دوم NonClustered Index هست. این نوع ایندکس زمانی کاربرد داره که شما جستجوهای زیادی رو بر روی فیلد دیگری غیر از کلید اصلی یا به عبارت بهتر روی فیلدی که کلاستر ایندکس روی اون قرار نداره رو انجام می دید. برای بالا بردن سرعت جستجو بر روی جدول و بر روی اون فیلدی که جستجوی زیادی روش انجام میشه یک NonClustered Index قرار میدیم که سرعت جستجو رو بسیار بالا میبره.
بحث ایندکس ها یه بحث بسیار مهم و البته حساس هست. باید حتما در این باره مطالعه کنید تا تمام زوایای کار با اون رو یاد بگیرید و بعد اقدام به تولید و نگهداری صحیح از اونها کنید.
2. مورد بعدی که میتونه روی سرعت تاثیر بذاره استفاده از Stored procedure ها هست. به جای اینکه کوئری مورد نظرتون رو مستقیما در محیط ویزوال بنویسید از sp ها استفاده کنید. دلیلش رو در لینک زیر قبلا توضیح دادم (پست های 19 و 23 رو مطالعه کنید).
http://barnamenevis.org/showthread.php?415859-%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C-%D8%B3%D9%88%D8%A7%D9%84%D8%A7%D8%AA-%D9%88-%D9%86%D8%B8%D8%B1%D8%A7%D8%AA-quot-%D9%BE%D8%B1%D9%88%DA%98%D9%87-%D8%B3%DB%8C-%D8%B4%D8%A7%D8%B1%D9%BE-%D8%A7%D8%B2-%D8%A7%D8%A8%D8%AA%D8%AF%D8%A7-%D8%AA%D8%A7-%D8%A7%D9%86%D8%AA%D9%87%D8%A7-quot
3. مورد بعدی استفاده از کوئری های بهینه هست. خیلی از مواقع یک کار رو میشه با چندین روش پیاده سازی کرد ولی معمولا یک روش بهترین نتیجه رو داره و بعضی از روش ها نتیجه خیلی بدی رو از لحاظ سرعت و عملکرد دارند.

مهدی هادیان2
شنبه 06 مهر 1392, 16:41 عصر
بسم الله الرحمن الرحیم
با سلام
با توجه به فرمایشات دوستان با اجازه یه جمع بندی میکنم.
جستجو در تمام رکوردهای بانک صورت گیرد ولی در مورد نتیجه جستجو صفحه بندی انجام شود.
با آرزوی موفقیت تمامی دوستان