عنوان
|
نويسنده
|
مشاهده
|
تعداد
آراء |
امتياز
|
كنترل های پويا در ASP.NET ( بخش دوم ) |
مديريت وب |
14910 |
6 |
4.8 |
با توجه به جایگاه داده در عصر حاضر و لزوم نگاه جامع به این مقوله مهم ، بر آن شدیم تا محوریت فعالیت های خود را بر روی این موضوع متمرکز نمائیم . از این رو گروه فابک با شعار فناوری اطلاعات برای کسب وکار شکل گرفت و خدمات خود را از طریق سایت www.fabak.ir به مخاطبان محترم عرضه می نماید
 |
كنترل های پويا در ASP.NET
كنترل های پويا در ASP.NET
( بخش دوم )
در
بخش اول به ضرورت استفاده
پويا از كنترل های سرويس دهنده در برنامه های وب
اشاره و با نحوه ايجاد ، دستيابی به خصلت ها و توليد رويدادها توسط اسكريپت
آشنا شديم . در اين بخش به بررسی يك نمونه مثال كاربردی خواهيم پرداخت تا توان خود
را جهت ايجاد كنترل های سرويس دهنده به صورت پويا افزايش دهيم .
به دليل استفاده از كنترل
<asp:Literal > ، در
ابتدا با اين كنترل و جايگاه استفاده از آن آشنا می شويم .
كنترل سرويس دهنده <asp:Literal
>
در زمان كدينگ برنامه های وب به مواردی برخورد خواهيم كرد كه لازم است متن و يا تگ
های XHTML را به يك PlaceHolder
به منظور كمك در مديريت و فرمت كنترل هائی
كه به صورت پويا ايجاد شده اند ، اضافه نمائيم . به
عنوان نمونه ، ممكن است لازم باشد كه يك پاراگراف ، خطوط خالی
و يا كاراكترهای خاصی را
به همراه كنترل ها استفاده نمائيم تا
آنها با يك فرمت مناسب بر روی صفحه نمايش
داده شوند . با توجه به اين كه متن ، رشته و يا تگ های
XHTML را نمی توان در PlaceHolder قرار داد ، می
بايست آنها را توسط اسكريپت در زمان
ايجاد كنترل ها به PlaceHolder اضافه نمود .
در چنين مواردی می توان از كنترل <asp:Literal >
استفاده نمود .
ايجاد كنترل Literal توسط اسكريپت همانند ساير كنترل های سرويس دهنده در
ASP.NET است . بدين منظور كافی است كه كنترل به عنوان يك كنترل
Literal تعريف و به خصلت Text آن يك متن و يا رشته مبتنی
بر XHTML نسبت داده شود
و در ادامه آن را به
PlaceHolder اضافه كرد .از كنترل های Literal به تعداد مورد نياز می توان
در يك PlaceHolder استفاده نمود
.
در كد زير ، يك كنترل Literal تعريف تا در
ادامه يك خط خالی در بين ساير كنترل های پويای ايجاد شده ، اضافه نمايد .
Dim MyBreak As Literal
MyBreak.Text = "<br/>"
MyPlaceHolder.Controls.Add(MyBreak)
|
مثال : ايجاد كنترل های
سرويس دهنده با استفاده از اسكريپت
در اين مثال قصد داريم متناسب با هر يك از گروه مقالات تعريف شده در بانك اطلاعاتی
مقالات ، دكمه هائی را بر روی يك فرم وب قرار دهيم تا كاربران پس از كليك بر روی هر
يك از آنها ، مقالات مربوط به گروه انتخابی را مشاهده نمايند .دكمه ها به صورت پويا
و در زمان اجراء ايجاد خواهند شد و متناسب با تغيير داده موجود در بانك ، وضعيت
آنها نيز تغيير خواهد كرد . شكل زير ، خروجی برنامه را نشان می دهد .

بدين منظور از يك بانك اطلاعاتی اكسس با نام Maghalat_Srco.mdb
كه شامل دو جدول Article_Type و Article_Spec است ، استفاده
خواهيم كرد . در اولين جدول با نام Article_Type ، گروه های مختلف مقالات
ذخيره می گردد .
جدول Article_Type |
نام فيلد
|
نوع |
Group_ID |
AutoNumber ،
Primery Key
|
Name |
Text |
Description |
Text |
در جدول دوم با نام Article_Spec ، مشخصات هر
يك از مقالات ذخيره می گردد .
جدول Article_Spec |
نام فيلد
|
نوع |
Article_ID |
AutoNumber ،
Primery Key
|
Group_ID |
Number , Integer
|
Title |
Text |
در ادامه يك فرم وب با نام
Show_Article_By_Group.aspx را ايجاد می نمائيم كه در هر يك از بخش
های Script و Html آن
از امكانات متعددی استفاده شده است .
در بخش Html از سه كنترل
سرويس دهنده با اهداف زير استفاده شده است :
-
<asp:PlaceHolder>
: تعريف يك ناحيه برای نمايش كنترل هائی كه آنها را به صورت پويا و در زمان
اجراء متناسب با داده موجود در بانك اطلاعاتی ايجاد خواهيم كرد . در اين مثال ،
برای هر گروه مقاله تعريف شده در بانك اطلاعاتی يك button
به صورت پويا ايجاد خواهد شد .
-
<asp:AccessDataSource>
: با استفاده از كنترل منبع داده فوق ، به بانك اطلاعاتی Maghalat_Srco.mdb دستيابی
و در اولين مرتبه ( زمان استقرار صفحه در حافظه و از طريق روتين
page_Load ) ، متناسب با داده موجود در جدول Article_Type ، دكمه های
مورد نظر را ايجاد خواهيم كرد . از كنترل فوق در مرتبه دوم و از طريق روتين
Get_Articles نيز استفاده خواهد شد تا متناسب با دكمه ای
كه كاربر بر روی آن كليك نموده است ، مقالات مربوط به آن گروه از جدول Article_Spec
بازيابی و در Gridview نمايش داده شوند .
-
<asp:GridView>
: از كنترل فوق به منظور نمايش مقالات مربوط به يك گروه خاص استفاده می گردد ( ساده
ترين نوع استفاده از يك GridView ) .
در بخش script از دو روتين Page_Load
و Get_Article با اهداف زير استفاده شده است
.
-
Page_Load : در
اين روتين ، پس از دستيابی به بانك اطلاعاتی اشاره شده ، اطلاعات موجود در جدول
Article_Type بازيابی و متناسب با داده موجود ، دكمه هائی برای هر يك از گروه
مقالات ايجاد خواهد شد . علاوه بر ايجاد پويای هر button
، سبك نمايش Button و توليد Event
handler مورد نياز ( Get_Articles ) نيز از طريق
اين روتين انجام خواهد شد .
-
Get_Articles : در
اين روتين ، متناسب با اين كه كاربر بر روی كدام button
كليك نموده است ، يك query به صورت پويا و پارامتريك
ايجاد و اجراء می گردد . در نهايت زمينه نمايش ركوردهای بازيابی شده در
Gridview نيز فراهم می گردد .
<%@ Import
Namespace="System.Data.OleDb" %>
<%@ Import Namespace="System.Drawing" %>
<SCRIPT Runat="Server">
Sub Page_Load
Dim DBConnection As OleDbConnection
Dim DBCommand As OleDbCommand
Dim DBReader As OleDbDataReader
Dim SQLString As String
Dim Counter As Integer = 0
DBConnection = New OleDbConnection( _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Server.MapPath("~/OurDataBase/Maghalat_Srco.mdb"))
DBConnection.Open()
SQLString = "SELECT DISTINCT Group_ID , Name FROM Article_Type order by Name"
DBCommand = New OleDbCommand(SQLString, DBConnection)
DBReader = DBCommand.ExecuteReader()
While DBReader.Read()
Dim MyButton as New Button
MyButton.Text = DBReader("Name")
MyButton.CommandName = DBReader("Group_ID")
MyButton.Width = Unit.Parse("100px")
MyButton.Font.Size = FontUnit.Parse("8pt")
MyButton.Font.Name = "Tahoma"
AddHandler MyButton.Command, AddressOf Get_Articles
ButtonArea.Controls.Add(MyButton)
Dim MyBlank As New Literal
MyBlank.Text = " "
ButtonArea.Controls.Add(MyBlank)
Counter += 1
If Counter Mod 3 = 0 Then
Dim MyBreak As New Literal
MyBreak.Text = "<br/>"
ButtonArea.Controls.Add(MyBreak)
End If
End While
DBReader.Close()
DBConnection.Close()
End Sub
Sub Get_Articles
(Src as Object, Args As CommandEventArgs)
Dim SQLString As String
SQLString = "SELECT Title ,Description FROM Article_Spec " & _
"WHERE Group_ID = " & Args.CommandName & "
ArticlesSource.SelectCommand = SQLString
End Sub
</SCRIPT>
<form Runat="Server">
ايجاد كنترل های سرويس دهنده به صورت پويا
<asp:PlaceHolder id="ButtonArea"
Runat="Server"/>
<asp:AccessDataSource id="ArticlesSource"
Runat="Server"
DataFile="~/OurDataBase/Maghalat_Srco.mdb"
SelectCommand="SELECT Title , Description FROM Article_Spec
"/>
<asp:GridView id="BookGrid"
DataSourceID="ArticlesSource" Runat="Server" />
</form>
|
توضيحات
-
پس از استقرار صفحه در حافظه ، بانك اطلاعاتی فعال و
متناسب با داده موجود در جدول Article_Type ، برای هر
گروه مقاله يك button ايجاد خواهد شد .
-
برای هر ركورد يك شی جديد Button
ايجاد و به خصلت Text آن ، مقدار
Name ( مربوط به ركورد بازيابی شده كه نشاندهنده نام گروه مقاله است )
نسبت داده می شود . برای نمايش مطلوب Button ، برخی خصلت
های آن مقداردهی می گردند ( نظير نوع فونت و يا اندازه آن ) .
-
با توجه به اين كه دكمه ها به عنوان يك
Command button پيكربندی شده اند ، خصلت CommandName
معادل Group_ID در نظر گرفته شده و در ادامه مقدار
Group_ID به روتين Get_Articles
ارسال تا مقالات مربوط به گروه انتخابی را در يك GridView
نمايش دهد .
-
يك Command Event توسط
اسكريپت برای button مشخص می گردد كه به برنامه فرعی
Get_Articles اشاره می نمايد . در نهايت ،
button به PlaceHolder اضافه
می شود .
-
از طريق حلقه تكرار ، هر يك از دكمه ها ايجاد و به
PlaceHolder اضافه می شوند . در اين مثال ، شش
button ايجاد خواهد شد چراكه جدول
Article_Type حاوی شش ركورد است ( شش نوع گروه برای مقالات تعريف شده است )
و متناسب با كاهش و يا افزايش گروه مقالات تعداد Button
بر روی فرم وب تغيير خواهد كرد.
-
بلافاصله پس از هر Button
يك زوج فضای خالی به منظور تفكيك افقی دكمه ها از يكديگر قرار می گيرد . بدين منظور
از كنترل Literal كه مقدار خصلت Text
آن معادل "nbsp; &" در نظر گرفته شده است ، استفاده می گردد . اين
كنترل پس از اين كه يك Button در
PlaceHolder مستقر گرديد ، در مكان مربوطه درج خواهد شد .
-
همچنين از يك خط خالی پس از نمايش سه
button در هر سطر ، استفاده شده است . اين كاراكتر با
استفاده از يك كنترل Literal به PlaceHolder اضافه
شده است كه مقدار خصلت آن " </br >"
در نظر گرفته شده است .
-
از يك شمارنده برای تشخيص اضافه شدن يك Literal
به PlaceHolder استفاده شده است تا به كمك آن بتوانيم
تشخيص دهيم كه آيا در يك سطر سه Button نمايش داده شده
است و يا خير.
در صورتی كه عبارت Counter Mod 3 = 0 درست باشد يك
خط خالی به كمك كنترل Literal به PlaceHolder
اضافه خواهد شد .