برترین مقالات کامپیوتر

برترین مقالات کامپیوتر

برترین مقالات کامپیوتر

برترین مقالات کامپیوتر

کنترل های پویا در ASP.NET ( بخش اول )

کنترل های سرویس دهنده معمولا" در زمان طراحی و با توجه به نیاز یک برنامه در صفحات ASP.NET قرار می گیرند . در چنین مواردی ، پیاده کنندگان در زمان طراحی نسبت به تعداد و نوع کنترل های سرویس دهنده مورد نیاز آگاهی کامل دارند . به عبارت دیگر ، دانش لازم برای استفاده از کنترل ها در زمان طراحی وجود دارد . در برخی موارد ممکن است دانش لازم به منظور استفاده از کنترل ها ( نوع و یا تعداد کنترل مورد نیاز ) در زمان طراحی وجود نداشته باشد . این وضعیت در مواردی که اطلاعات صفحه از طریق منابع داده خارجی تامین می گردد ، بسیار مشهود می باشد .
به عنوان نمونه ، فرض کنید می خواهیم دکمه هائی را بر روی یک فرم وب تولید نمائیم که با کلیک بر روی هر از آنها ، کتاب های موجود در بانک اطلاعاتی مرتبط با آن گروه خاص ، نمایش داده شوند . تعداد button مورد نیاز به تعداد گروه های تعریف شده در بانک اطلاعاتی ، بستگی خواهد داشت . با این که در زمان طراحی ممکن است شش گروه کتاب در بانک اطلاعاتی وجود داشته باشد ، ولی ممکن است متناسب با رشد اطلاعات در بانک ، گروه های جدیدی تعریف  و یا برخی گروه ها حذف گردند . در چنین مواردی ، تعداد button ایجاد شده بر روی فرم متاثر از تعداد گروه های تعریف شده در بانک اطلاعاتی است .  بدیهی است تا زمانی که به بانک اطلاعاتی دستیابی نشده باشد نمی توان به اطلاعات مورد نیاز جهت ایجاد buttons دستیابی داشت . به عبارت دیگر ،  هدف ایجاد buttons در زمان اجراء است نه در زمان طراحی . در چنین مواردی ، کنترل ها به صورت پویا و در زمان استقرار صفحه در حافظه ایجاد خواهند شد .

ایجاد کنترل ها با استفاده از اسکریپت
برای ایجاد یک کنترل با استفاده از اسکریپت در ابتدا می بایست یک شی کنترل را به عنوان یک نوع کنترل تعریف نمود . نوع کنترل را می توان یکی از نوع های استاندارد کنترل های سرویس دهنده در نظر گرفت . مثلا"  برای یک ایجاد یک کنترل <asp:label> ، می بایست آن را به عنوان یک نوع label ، برای ایجاد یک کنترل <asp:button> ، آن را به عنوان یک نوع button و برای ایجاد یک کنترل <asp:TextBox> آن را به عنوان یک نوع TextBox تعریف کرد .
کد زیر نحوه تعریف یک کنترل را نشان می دهد :

Dim MyLabel    As  New Label
Dim MyButton   As  New Button
Dim MyTextBox As  New TextBox

کنترل <asp:PlaceHolder>
پس از ایجاد یک کنترل ، به منظور نمایش آن بر روی صفحه می بایست آن را به یکی از مجموعه های Controls اضافه نمود . صفحه، دارای یک مجموعه کنترل با نام page.collection است که تمامی کنترل های موجود در یک صفحه  و سایر کنترل های جدیدی را که در ادامه می توان به اضافه نمود را شامل می شود . معمولا" ترجیح داده می شود که یک ناحیه خاص بر روی صفحه تعریف  و در ادامه کنترل های جدیدی را به آن اضافه نمود . 
کنترل <asp:PlaceHolder> ، ناحیه ای را مشخص می نماید که می توان کنترل های ایجاد شده به صورت پویا را در آن قرار داد . با نسبت دادن یک کنترل به مجموعه کنترل  PlaceHolder ، امکان مشاهده کنترل بر روی صفحه فراهم می گردد .
کد زیر نحوه  ایجاد یک کنترل PlaceHolder را نشان می دهد .

 <asp:PlaceHolder id="id" Runat="Server"/>

کنترل PlaceHolder خود فضائی را بر روی صفحه اشغال نخواهد کرد و صرفا" ناحیه ای را بر روی صفحه به منظور افزودن کنترل های پویا ، رزو می نماید . به کنترل فوق می بایست یک id نسبت داده شود تا امکان دستیابی به آْن از طریق اسکریپت فراهم گردد .

اضافه کردن کنترل به یک PlaceHolder
پس از تعریف یک PlaceHolder ، با استفاده از متد Add می توان کنترل مورد نظر را به آن اضافه نمود . کد زیر نحوه استفاده از  متد Add کنترل PlaceHolder   را نشان می دهد .

 PlaceholderId.Controls.Add(Control)

PlaceHolderId ، شناسه ( id ) کنترل PlaceHolder است که از طریق آن می توان به کنترل دستیابی داشت. Control ، نام کنترلی که می بایست به صورت پویا به صفحه اضافه گردد .  
در مثال زیر‌ ، یک PlaceHolder تعریف و در ادامه یک کنترل label جدید ایجاد و به PlaceHolder  اضافه شده است .

<SCRIPT Runat="Server">

Sub Page_Load

 Dim MyLabel As New Label
 MyPlaceHolder.Controls.Add(MyLabel)

End Sub

</SCRIPT>

<form Runat="Server">

<asp:PlaceHolder id="MyPlaceHolder" Runat="Server"/>

</form>

کنترل label  بر روی صفحه و در مکان مشخص شده توسط PlaceHolder نمایش داده می شود . در ادامه می توان کنترل های دیگری را با استفاده از اسکریپت تولید و به PlaceHolder  اضافه نمود ( در خطوط بعد از کنترل label نمایش داده می شوند ) . در صورت نیاز می توان چندین کنترل PlaceHolder را تعریف و در مکان های مختلف صفحه مستقر نمود تا در ادامه بتوان کنترل های تولید شده توسط اسکریپت را در هر یک از آنها با توجه به ضرورت های موجود ، اضافه نمود .
با توجه به این واقعیت که کنترل های تولید شده توسط اسکریپت به عنوان بخشی از view state صفحه در نظر گرفته نخواهند شد ، می بایست برای ایجاد آنها از روتین Page_load استفاده گردد .

 دستیابی به خصلت های یک کنترل توسط اسکریپت
در مثال قبل ، کنترل label به صورت پیکربندی پیش فرض و بدون هیچگونه تنظمیات خاصی بر روی صفحه نمایش داده می شود . در صورت تمایل می توان خصلت های مرتبط با یک کنترل را به صورت پویا و به کمک اسکریپت مقداردهی نمود .
کد زیر ، بازنویسی مثال قبلی است که در ابتدا خصلت های متعدد کنترل label مقداردهی و در ادامه کنترل فوق به مجموعه کنترل های PlaceHolder  اضافه شده است .

<%@ Import Namespace="System.Drawing" %>

<SCRIPT Runat="Server">

Sub Page_Load

  Dim MyLabel As New Label
  MyLabel.id = "Label01"
  MyLabel.Text = "این کنترل توسط اسکریپت تولید شده است"
  MyLabel.ForeColor = Color.FromName("blue")
  MyLabel.Font.Bold = True
  MyLabel.Font.Size = FontUnit.Parse("14pt")
  MyPlaceHolder.Controls.Add(MyLabel)

End Sub

</SCRIPT>

<form Runat="Server">

<asp:PlaceHolder id="MyPlaceHolder" Runat="Server"/>

</form>

تولید رویدادهای کنترل توسط اسکریپت
در مواردی‌ که کنترل هائی نظیر Button که به کمک آنها می توان اسکریپت های موجود در یک برنامه را فعال نمود به صورت پویا ایجاد می گردند ، می بایست event handler مورد نظر را به منظور فراخوانی برنامه فرعی نیز مشخص نمود . برای ایجاد یک event handler توسط اسکریپت از کد زیر استفاده می گردد . 

 AddHandler Control.Event, AddressOf Subprogram

control ، نام کنترلی است که event handler به آن نسبت داده خواهد شد . Event ، نوع Event handler را مشخص می نماید ( مثلا"  Click ) و  Subprogram ، نام روتینی است که پس از بروز رویداد می بایست فعال گردد .
در مثال زیر ، پس از تعریف یک Buuton و تنظیم خصلت های آن در زمان اجراء ، یک event handler نیز تعریف شده است تا پس از کلیک بر روی دکمه فوق ، روتین مورد نظر فعال (My_Subprogram ) و پاسخگوی رویداد ایجاد شده باشد .

Dim MyButton As New Button
MyButton.id = "Button1"
MyButton.Text = "Click Me"
AddHandler MyButton.Click, AddressOf My_Subprogram
MyPlaceHolder.Controls.Add(MyButton)

در مثال فوق ، یک handler برای رویداد Click به کنترل Button اضافه شده است . My_Subprogram ، روتینی است که پس از بروز رویداد ( کلیک بر روی button ) ، فعال و پاسخگوی رویداد ایجاد شده است .
پس از این که یک Button به صفحه اضافه گردید (  در مکان MyPlaceHolder ) ، عملکرد آن مشابه زمانی است که از یک Button  در زمان طراحی استفاده شده باشد:

<asp:Button id="Button1" Text="Click Me" OnClick="My_Subprogram" Runat="Server"/>

نوع رویداد تولید شده توسط اسکریپت که می توان آن را به کنترل ها اضافه نمود ، همانند event handler استفاده شده به همراه کنترل ها در زمان طراحی است . مثلا" کنترل button قادر به تشخیص دو event handler  با نام OnClick و OnCommand است . بنابراین ، می توان با استفاده از اسکریپت دو رویداد فوق را برای یک button تولید نمود . زمانی که یک رویداد Command توسط اسکریپت تولید می گردد ، می توان خصلت های CommandName و CommandArgument را نیز  برای button  تنظیم نمود . 
در بخش دوم به بررسی سایر عملیات در ارتباط با کنترل های پویا خواهیم پرداخت .

نظرات 0 + ارسال نظر
برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد