فیلتر کردن اطلاعات :

گام بعدی در کار با منابع داده ای ، فیلتر کردن اطلاعات دریافتی است . یعنی کنترل را طوری تنظیم کنیم ، که دقیقا اطلاعاتی را نمایش دهد که ما به آن نیاز داریم . برای مثال فرض کنید که در جدول Students پایگاه داده درانشگاه ، شما مشخصات دانشجویان مختلف را ذخیره کرده اید . اما در یک بخش برنامه ، فقط می خواهید اطلاعات دانشسجویانی را نمایش دهید که رشته تحصیلی آنها سخت افزار ( HaraWare ) است . در این صورت باید یک مکانیزم فیلترینک داده را مورد استفاده قرار دهیم ، تا کنترل فقط اطلاعات با جزییات درخواستی را نمایش دهد . برای نمونه در مثال فوق باید به کنترل بگوییم که فقط اطلاعات دانشجویانی را ارائه بدهد که مقدار فیلد رشته تحصیلی آنها ( Major ) برابر با Hardware است .
کنترل های داده مختلف از جمله SqlDataSource ، امکان فیلتر کردن اطلاعات را به ما می دهند . برای فعال کردن امکان فیلترینگ داده ، باید کنترل را طوری تنظیم کنید ، که اطلاعات درخواستی را به صورت DataSet بر گرداند . برگرداندن اطلاعات به صورت DataSet باعث می شود تا کنترل اطلاعات را به صورت موقت در حافظه سرور نگهداری کند و به همین دلیل می توان اعمال مختلفی از جمله فیلترینگ را بر روی داده ، انجام داد . برای این منظور باید مقدار خاصیت DataSourceMode کنترل را بر روی مقدار DataSet تنظیم کنیم . سپس باید یک عبارت فیلترینگ را در خاصیت FilterExpression کنترل تعیین کنیم . این عبارت باید شامل یک یا چند جفت نام فیلد و مقدار مورد نظر برای آن باشد . جهت انجام عملیات فیلترینگ داده ، باید مراحل زیر را انجام دهید :

یک کنترل SqlDataSource را بر روی صفحه قرار داده و آن را به پایگاه داده مورر نظر خود متصل کنید .یعنی باید برایث کنترل ConnectoinString , ProvideName و دستور انتخاب داده Select را تعیین کنید .
مقدار خاصیت DataSourceMode کنترل SqlDataSource را روی مقدار DataSet تنظیم کنید .
مقدار خاصیت EnableCashing کنترل SqlDataSource را بر روی مقدار True تنظیم کنید .
فعال سازی خاصیت EnableCashing باعث می شود تا کنترل اطلاعات دریافتی را به صورت موقت در حافظه اصلی سرور نگهداری کند ، که باعث می شود کنترل برای اعمال مختلف سریعتر به داده های مورد نظر دسترسی داشته باشد ، زیرا به جای مراجعه دوباره به پایگاه داده ، اطلاعات را از حافظه اصلی دریافت می کند .
مقدار خاصیت CashDuration کنترل SqlDataSource را به یک مقدار که بیانگر تعداد ثانیه هایی است که کنترل باید اطلاعات را در حافظه اصلی سرور داده نگهداری کند ، تنظیم کنید . مقدار این خاصیت به برنامه شما بستگی دارد و مثلا اگر مقدار آن را بر روی ۱۰۰ تنظیم کنید ، کنترل اطلاعات دریافتی را به مدت ۱۰۰ ثانیه در حافظه اصلی سیستم نگهداری می کند .
مقدار خاصیت FilterExpression کنترل SqlDataSource را به عبارتی که می خواهید عملیات فیلترینگ بر حسب آن انجام شود ، تنظیم کنید . همانطور که گفتیم این خاصیت باید شامل یک یا چند جفت نام فطلد و مقدار مورد نظر برای آن باشد . برای نمونه در مثال ابتدای صفحه در مورد پایگاه داده دانشگاه را در نظر بگیرید . مثلا می خواهیم که اطلاعات دانشجویانی را نمایش دهیم که مقدار فیلد رشته آنها ( Major ) برابر با مقدار HardWare باشد ، در این ضورت باید مقدار خاصیت FilterExpression کنترل به صورت زیر باشد :

 FilterExpression = ” Major = ‘ HardWare “

در نهایت کد کنترل شما باید به صورت زیر باشد :

 < asp:SqlDataSource   runat=”server”   ID=”SqlControl1″   s ConnectionString = ” < %$ ConnectionStrings:SampleConnection % > ”   SelectCommand=”Select Name , Family from Students ”   DataSourceMode = ” DataSet ”   EnableCashing = ” True ”   CashDuration = ” 100 ”   FilterExpression = ” Major = ‘ HardWare ‘ ”   >
< /asp:SqlDataSource >
<asp:GridView    ID=”GridView1″    runat=”server”   DataSourceID=”SqlControl1″>
</asp:GridView>

 

نکته : عبارت تعیین شده در خاصیت FilterExpression می تواند هم بیشتر از یک عبارت باشد ( به تعداد مورد نیاز می توان عبارت تعیین کرد و محدودیتی وجود ندارد ) و هم می تواند یک حالت مقایسه از نظر بزرگ و کوچکی نیز باشد . مثلا در مثال زیر که تغییر یافته مثال بالاست ، ۲ شرط سخت افزار بودن رشته و بالاتر بودن نمره ( Grade ) از مقدار ۱۶ تعیین شده است :

 < asp:SqlDataSource   runat=”server”   ID=”Sql2″   ConnectionString = ” < %$ ConnectionStrings:SampleConnection % > ”   SelectCommand=”Select Name , Family from Students ”   DataSourceMode = ” DataSet ”   EnableCashing = ” True ”   CashDuration = ” 100 ”   FilterExpression = ” Major = ‘ HardWare ‘ AND Grade > 16 ”   >
< /asp:SqlDataSource >
<asp:GridView    ID=”GridView12    runat=”server”   DataSourceID=”SqlControl1″>
</asp:GridView>

استفاده از پارامترها در عبارت های فیلترینگ داده :

در مثال های بالا ، ما عبارت ها و مقادیری که می خواستیم با آنها عملیات فیلترینگ داده را انجام دهیم ، از قبل و به صورت استاتیک در کد برنامه تعیین کرده بودیم . اما در برنامه های واقعی لازم است که اطلاعات بر مبنای مقادیر و. پارامترهایی که در زمان اجرا توسط کنترل به برنامه ارسال می شوند ، فیلتر و ویرایش شوند . برای نمونه در مثال های بالا شاید کاربر بخواهد نام رشته را از یک کادر کشویی انتخاب کرده و در یک لحظه اطلاعات مربوط به دانشجویان سخت افزار و رد یک لحظه اطلاعات مربوط به دانشجویان رشته نرم افزار را مشاهده کند . بنابراین باید شرایطی را فراهم کنیم که از پارامترها در دستورات فیلترینگ داده استفاده شود .
برای این منظور باید عبارت های تعیین شده در خاصیت FilterExpression کنترل را به گونه ای تنظیم کنید ، که شامل جای خالی هایی برای پارامترهای ورودی باشد . مفدار پارامترهای ورودی می توانند از منابع مختلفی همچون کنترل های ASP.NET روی صفحه مثل TextBox و یا DropDownList ، کوکی های صفحه ، مقادیر فرم های HTML و … تامین شوند .

برای استفاده از پارمترها در عملیات فیلترینگ داده مراحل زیر را انجام دهید :

عبارت های فیلترینگ داده کنترل یعنی مقدار خاصیتFilterExpression کنترل را به گونه ای تنظیم کنید که شامل جای خالی برای پارامترهای لازم که می خواهیم مقادیر آنها را در زمان اجرا ارسال کنیم ، باشد . جای خالی ها در عبارت فیلترینگ با استفاده از نماد { n } ایجاد می شوند ، که n شماره ترتیبی پارامترهای مورد استفاده است . n از ۰ شروع شده و به ازای هر پارامتر یک شماره افزایش می یابد . در عبارت فیلترینگ باید نام فیلدها را نوشته و به جای مقدار مورد نظر برای آنها کاراکتر جای خالی با شماره مربوطه قرار بگیرد .
مثال : برای مثال در دو عبارت زیر به ترتیب ۱ و ۲ جای خالی را برای دریافت مقدار پارامترهای لازم تعیین کرده ایم :

 FilterExpression = ” Major = ‘ { 0 } ‘ “
FilterExpression = ” Major = ‘ { 0 } ‘ AND Grade = ‘ { 1 } ‘ “

تگ < FilterParameters > را به کنترل SqlDataSource را به کنترل اضافه کنید . سپس به ازای هر پارامتر موجود در عبارت فیلترینگ ، به ترتیب شماره یک تگ پارامتر با مشخصات لازم را ایجاد کنید . برای دریافت اطلاعات راجع به انواع پارامترهای مورد استفاده در دستورات داده ای ASP.NET و نحوه ایجاد آنها به بخش استفاده از پارامترها با کنترل های داده مراجعه کنید .
مثال : در مثال زیر یک پارامتر از نوع ControlParameter برای دریافت مقدار آیتم انتخاب شده در یک کنترل DropDownList ، ایجاد شده است :

 < FilterParameter >
< asp:ControlParameter   Name = ” MyParameter ” ControlID = ” DropDown1 ” PropertyValue =” SelectedValue ”   / >
< /FilterParameters >

در نهایت باید کد کنترل شما به صورت زیر باشد :

در مثال زیر ۲ پارامتر برای مقادیر رشته تحصیلی ( Major ) و نمره ( Grade ) در عبارت FilterExpression کنترل SqlDataSource تعیین کرده ایم ، که به ترتیب مقادیر خود را از یک کنترل کادر کشویی DropDownList و یک کنترل TextBox دریافت می کنند . کنترل SqlDataSource فقط اطلاعات دانشجویانی را ارسال می کند که رشته تحصیلی آن در کنترل DropDownList انتخاب شده و نمره اش هم در کادر متنی تعیین شده است :

 < asp:SqlDataSource   runat=”server”   ID=”Sql2″   ConnectionString = ” < %$ ConnectionStrings:SampleConnection % > ”   SelectCommand=”Select Name , Family from Students ”   DataSourceMode = ” DataSet ”   EnableCashing = ” True ”   CashDuration = ” 100 ”   FilterExpression = ” Major = ‘ { 0 } ‘ AND Grade = { 1 } ”   >
< FilterParameter >
< asp:ControlParameter   Name = ” MyParameter ” ControlID = ” DropDown1 ” PropertyValue =” SelectedValue ”   / >
< asp:ControlParameter   Name = ” MyParameter2 ” ControlID = ” Text1 ”   / >
< /FilterParameters >
< /asp:SqlDataSource >< asp:DropDownList runat=”server” ID=”DropDown1″ >
< asp:ListItem Selected=”True” > HardWare < /asp:ListItem >
< asp:ListItem > SoftWare < /asp:ListItem >
< /asp:DropDownList >
< asp:TextBox runat=”server” ID=”text1″ / >