فيلترينگ داده در کنترل SqlDataSource
فيلتر کردن اطلاعات :
گام بعدی در کار با منابع داده ای ، فيلتر کردن اطلاعات دريافتی است . یعنی کنترل را
طوری تنظيم کنيم ، که دقيقا اطلاعاتی را نمايش دهد که ما به آن نياز داريم . برای مثال
فرض کنيد که در جدول Students پايگاه داده درانشگاه ، شما مشخصات دانشجويان مختلف را
ذخيره کرده ايد . اما در يک بخش برنامه ، فقط می خواهيد اطلاعات دانشسجويانی را نمايش
دهيد که رشته تحصیلی آنها سخت افزار ( HaraWare ) است . در اين صورت بايد يک مکانيزم
فيلترينک داده را مورد استفاده قرار دهيم ، تا کنترل فقط اطلاعات با جزيیات درخواستی
را نمايش دهد . برای نمونه در مثال فوق بايد به کنترل بگوييم که فقط اطلاعات دانشجويانی
را ارائه بدهد که مقدار فيلد رشته تحصيلی آنها ( Major ) برابر با Hardware است .
کنترل های داده مختلف از جمله SqlDataSource ، امکان فيلتر کردن اطلاعات را به ما می
دهند . برای فعال کردن امکان فيلترينگ داده ، بايد کنترل را طوری تنظيم کنيد ، که اطلاعات
درخواستی را به صورت DataSet بر گرداند . برگرداندن اطلاعات به صورت DataSet باعث می
شود تا کنترل اطلاعات را به صورت موقت در حافظه سرور نگهداری کند و به همين دلیل می
توان اعمال مختلفی از جمله فيلترينگ را بر روی داده ، انجام داد . برای این منظور بايد
مقدار خاصيت DataSourceMode کنترل را بر روی مقدار DataSet تنظيم کنيم . سپس بايد يک
عبارت فيلترينگ را در خاصيت FilterExpression کنترل تعيين کنيم . اين عبارت بايد شامل
يک يا چند جفت نام فيلد و مقدار مورد نظر برای آن باشد . جهت انجام عمليات فيلترينگ
داده ، بايد مراحل زير را انجام دهيد :
- يک کنترل SqlDataSource را بر روی صفحه قرار داده و آن را به پايگاه داده مورر نظر
خود متصل کنيد .یعنی بايد برایث کنترل ConnectoinString , ProvideName و دستور انتخاب
داده Select را تعيين کنيد .
- مقدار خاصيت DataSourceMode کنترل SqlDataSource را روی مقدار DataSet تنظيم کنيد .
- مقدار خاصيت EnableCashing کنترل SqlDataSource را بر روی مقدار True تنظيم کنيد .
فعال سازی خاصيت EnableCashing باعث می شود تا کنترل اطلاعات دريافتی را به صورت موقت
در حافظه اصلی سرور نگهداری کند ، که باعث می شود کنترل برای اعمال مختلف سريعتر به
داده های مورد نظر دسترسی داشته باشد ، زيرا به جای مراجعه دوباره به پايگاه داده ،
اطلاعات را از حافظه اصلی دريافت می کند .
- مقدار خاصيت CashDuration کنترل SqlDataSource را به یک مقدار که بیانگر تعداد ثانیه
هایی است که کنترل بايد اطلاعات را در حافظه اصلی سرور داده نگهداری کند ، تنظيم کنيد
. مقدار این خاصيت به برنامه شما بستگی دارد و مثلا اگر مقدار آن را بر روی 100 تنظيم
کنيد ، کنترل اطلاعات دريافتی را به مدت 100 ثانيه در حافظه اصلی سيستم نگهداری می
کند .
- مقدار خاصيت 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 می تواند هم بيشتر
از يک عبارت باشد ( به تعداد مورد نياز می توان عبارت تعيين کرد و محدوديتی وجود ندارد
) و هم می تواند يک حالت مقايسه از نظر بزرگ و کوچکی نيز باشد . مثلا در مثال زير که
تغيير یافته مثال بالاست ، 2 شرط سخت افزار بودن رشته و بالاتر بودن نمره ( Grade )
از مقدار 16 تعيين شده است :
< 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 از 0 شروع
شده و به ازای هر پارامتر يک شماره افزايش می یابد . در عبارت فيلترينگ بايد نام فيلدها
را نوشته و به جای مقدار مورد نظر برای آنها کاراکتر جای خالی با شماره مربوطه قرار
بگيرد .
مثال : برای مثال در دو عبارت زير به ترتيب 1 و 2 جای خالی را برای
دريافت مقدار پارامترهای لازم تعيين کرده ايم :
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 >
|
- در نهايت بايد کد کنترل شما به صورت زير باشد :
در مثال زير 2 پارامتر برای مقادير رشته تحصيلی ( 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" / >
|