نسخه ی چهارم برنامه آماده شد.
هنگامی که منبع داده ی بایند شده به GridView خالی از رکورد باشد، GridView نمایش داده نمی شود.
برای رفع این مشکل، GridView ساختاری با نام EmptyDataTemplate معرفی کرده که قالب نمایشی GridView را در زمان خالی بودن منبع داده ی آن مشخص می کند.
همچنین پس از حذف رکوردهای آخرین صفحه از GridView، روال Fill_Paging_DropDown از طریق روال BindGridView فراخوانی می شود.
در این حالت، مقدار Index انتخابی DropDownList برابر با مقدار نگهدارنده ی آن در ViewState تنظیم خواهد شد.
از آنجا که پس از حذف رکوردهای آخرین صفحه، از تعداد صفحات GridView یک واحد کاسته می شود و در ViewState همچنان مقدار صفحه ی آخر وجود دارد، در هنگام تنظیم مقدار Index، کنترل DropDownList با خطایی از نوع ArgumentOutOfRangeException مواجه خواهیم شد!
برای رفع این مشکل، این خطا را Catch کرده و در بلوک Catch، مقدار ViewState را یک واحد کاهش می دهیم و مجددا روال BindGridView را با مقدار جدید ViewState فراخوانی می کنیم.
همچنین در اواخر فایل aspx برنامه، دستورات زیر نوشته شده بودند:
<script language="javascript" type="text/javascript">
document.getElementById("gridelement").value='<%= GridView1.FooterRow.Cells(6).Controls(1).ClientID %>,<%= GridView1.FooterRow.Cells(5).Controls(0).ClientID %>,<%= GridView1.HeaderRow.Cells(6).Controls(1).Controls( 0).Controls(0).ClientID %>';
</script
این دستورات به منظور شناسایی عناصر GridView برای عملکرد Context Menu مورد نیاز بودند و به تعدادی از عناصر موجود در Header و Footer کنترل GridView مراجعه می کردند.
ساختار GridView در زمان پُر بودن و خالی بودن منبع داده ی آن متفاوت هست. پس مسلما دستورات فوق در زمان خالی بودن GridView با خطا مواجه خواهند شد!
Context Menu ی ایجاد شده تنها در زمان وجود رکورد معنا پیدا خواهد کرد. از این رو، باید به طریقی خالی بودن یا نبودن منبع داده ی GridView را بررسی کنیم و در صورت پُر بودن آن، دستورات فوق را فراخوانی کنیم.
چون صحبت از شرط به میان آمد، این دستورات باید از فایل aspx حذف شوند و در فایل کد برنامه نوشته شوند.
من در روال LoadComplete فرم، با بررسی تعداد رکوردهای GridView (بزرگتر از صفر)، این کار را انجام دادم:
If (GridView1.Rows.Count > 0) Then
gridelement.Value = GridView1.FooterRow.Cells(6).Controls(1).ClientID & "," & GridView1.FooterRow.Cells(5).Controls(0).ClientID & "," & GridView1.HeaderRow.Cells(6).Controls(1).Controls( 0).Controls(0).ClientID
End If
تغییرات در این نسخه شامل استفاده از ساختار EmptyDataTemplate و بر طرف ساختن 2 باگ فوق است.
موفق باشید.