PDA

View Full Version : آموزش: آموزش استفاده بهینه GridView در UpdatePanel



alonemm
شنبه 30 اردیبهشت 1391, 14:24 عصر
باسلام:

یادم هست که چند سال پیش که PHP کار میکردم برای پیاده سازی قسمتی از صفحه به صورت Ajax نیاز بود با هسته Ajax و شی XMLHttpRequestObject کار کنیم که کمی پیاده سازی این روش ها رو وقت گیر میکرد و بعد ها هم با بوجود امدن Jquery این امر با توابعی که این کتابخانه داره کمی مدیریت پیاده سازی برای برنامه نویس راحت تر شد.

اما وقتی در ASP.net برای پیاده سازی عملیات Ajax با UpdatePanel آشنا شدم خیلی برام جالب بود که چقدر کار کردن برای برنامه نویس راحت شده و بدون اینکه نیازی به هسته Ajax باشه میتونیم مدریت رو داشته باشیم.

اما نکاتی در مورد UpdatePanel:
این امکان در صورتی که پیاده سازی عملیات Ajax رو برای ما راحت میکنه مشکل اصلی که بیشتر برنامه نویسان باهاش روبرو هستند این هست که صورت لود صفحه رو خیلی پایین میاره مخصوصا وقتی که از یک کنتل مثل گرید ویو در این قسمت استفاده کنید!
UpdatePanel در هنگامی که به یک کنترل باعث انجام پست بک میشه در این کنترل تمامی اشیا درون خود رو بروز رسانی میکند و ViewState کل صفحه رو به سمت سرور میفرسته و محتوای جدید اون رو دریافت میکنه و دوباره ذخیره سازی میکنه که اگر شما در صفحه از کنترل هایی زیادی استفاده کرده باشید حجم ViewState خیلی زیاد شده و این امر باعث صرف وقت و زمان لود بیشتر صفحه میشه.

خود کنترل گرید ویو هم به دلیل داشتن گزینه Paging که عملیات صفحه بندی رو خودش مدیرت میکنه و میسازه خیلی مورد استفاده برنامه نویسان قرار میگیره اما این گزینه به صورت مجازی صفحه بندی رو شکل میده یعنی اگر شما در یک کوئری 1000 تا رکورد رو واکشی کنید و به صورت 100 تایی صفحه بندی کنید تمامی 1000تا رکورد واکشی شده و فقط 100 تا نمایش داده میشه که این امر هم خودش باعث افت شدید زمان لود صفحه میشه.
برای حل کردن Paging به صورت واقعی در تاپیک آموزشی زیر چندی قبل 1 روش گزاشتم:
http://barnamenevis.org/showthread.php?322558-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%BE%DB%8C%D8%A7%D8%AF%D9%87-%D8%B3%D8%A7%D8%B2%DB%8C-Custom-Paging-%D8%AF%D8%B1-GridView-%D8%A8%D8%A7-%D8%AA%DA%A9%D9%86%D9%88%D9%84%D9%88%DA%98%DB%8C-Ajax

که با توجه به گزینه هایی که در بالا اشاره کردم میخوام کمی این مبحث رو بهینه تر پیاده سازی کنیم:

1- از پیجینگ به صورت دستی در کنترل گرید استفاده کنید.( در لینک بالا آموزش دادم).
2- هر کنترلی که نیاز به نگه داری اطلاعات در پست بک رو نداره گزینه EnableViewState اون رو برابر با False قرار بدید.
3-اشیایی که نیاز به بروز رسانی ندارند رو در داخل UpdatePnel قرار ندید و فقط همون کنترل هایی که نیاز بروز رسانی رو دارند رو بزارید.
4- شی هایی مثل Button که وظیفه بروزرسانی UpdatePanel یا تریگر کردن اون رو دارن رو بیرون UpdatePanel قرار بدید و به صورت زیر به UpdatePanel معرفی کنید:

<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnStart" EventName="Click" />
<asp:AsyncPostBackTrigger ControlID="btnPrevious0" EventName="Click" />
<asp:AsyncPostBackTrigger ControlID="txtPageNumber" EventName="Textchanged" />
<asp:AsyncPostBackTrigger ControlID="btnNext" EventName="Click" />
<asp:AsyncPostBackTrigger ControlID="btnEnd" EventName="Click" />
</Triggers>


5- گزینه EnableViewState رو در کنترل گرید برابر با False قرار بدید تفاوت این امر در عکس های زیر مشخص میشود:
87227
87228


پس در کلام آخر :
در صورتی که میتوند از UpdatePanel استفاده نکنید و از تکنیک هایی مثل WebMethod و Generic Handler ها استفاده کنید.
و در صورت نیاز حتما تکنیک های بالا رو پیاده سازی کنید تا از راندمان کاری بهتری بهره مند بشید.



موفق باشید.