آموزش ASP.Net به زبان ساده > آموزش مدل فرم های وب ASP.Net Web
Forms
درس یازدهم : آموزش کار با شی داده ای HashTable در فرم های وب ASP.Net
مقدمه :
در درس قبلی ، با نحوه
کار با شی داده ای ArrayList آشنا شدید . همانطور که متوجه شدید ، شی ArrayList
یک آرایه تک بعدی بوده و فقط به ازای هر آیتم ، می تواند یک مقدار را دریافت کند .
اما آیتم های کنترل های لیست وار در ASP.Net ، معمولا دارای یک جفت مقدار ( Value )
و متن ( Text ) هستند ، که برای تعیین نیاز به یک آرایه دو بعدی دارند .
در این آیتم ها ، مقداری که در سطح برنامه از آیتم خوانده شده و در کدنویسی استفاده
می شود ، درون پارامتر Value و متنی که در خروجی و بر روی صفحه نمایش داده می شود ،
درون خاصیت Text ذخیره می شوند .
شی HashTable یک آرایه دو بعدی است که مقدار هر آیتم را به صورت یک جفت ( Key / Value
) نگهداری می کند . در این شی Key همان متن یا ( Text ) و Value نیز مقدار آیتم می
باشد .
همچنین در شی آرایه ای HashTable ، می توان از Key به عنوان اندیس ( Indexes ) در آرایه
استفاده کرد که به وسیله آنها ، می توان عملیات جستجو در اعضای آرایه را با سرعت و
دقت زیادی انجام داد .
همانند شی ArrayList ، آیتم ها را در شی HashTable به وسیله متد ( )Add اضافه می کنیم
، با این تفاوت که در پرانتر مقابل متد ( )Add ، دو مقدار یکی برای Key و دیگری برای
Value تعریف می شود .
مثال : در مثال زیر ، نحوه تعریف یک شی HashTable را در رویداد Page_Load
صفحه نشان می دهد ، تا به محض اجرای صفحه ، ایجاد و مقدار دهی شود :
|
کد
|
<script runat="server">
Sub Page_Load
if Not
Page.IsPostBack then
dim mycountries=New Hashtable
mycountries.Add("N","Norway")
mycountries.Add("S","Sweden")
mycountries.Add("F","France")
mycountries.Add("I","Italy")
end if
end sub
</script>
|
نحوه اتصال کنترل های سرور به شی داده ای Hashtable :
شی HashTable می تواند به صورت اتوماتیک مقادیر متنی ( Text ) و مقادیر واقعی ( Values
) را برای کنترل های سرور زیر تولید کند :
- <asp:RadioButtonList>
- <asp:CheckBoxList>
- <asp:DropDownList>
- <asp:Listbox>
کنترل های فوق مقادیر ارسالی ( Text , Values ) را از شی HashTable دریافت کرده و نمایش
می دهند .
برای اتصال هر یک از کنترل های فوق به شی HashTable ، در ابتدا یک کنترل سرور لیست
وار ( برای مثال <asp:RadioButtonList> ) را بدون هیچ عنصر درونی asp:ListItem
، همانند کد زیر بر روی یک صفحه aspx. ایجاد نمایید :
|
کد
|
<form id="Form1" runat="server">
<asp:RadioButtonList id="rb"
runat="server" AutoPostBack="True" />
</form>
|
سپس اسکریپت زیر را در رویداد اجرای اولیه صفحه ( Page_Load ) قرار دهید ، تا ابتدا
شی HashTable ایجاد شده و سپس به کنترل سرور مورد نظر متصل شود :
|
کد
|
<script runat="server">
Sub Page_Load
if Not Page.IsPostBack
then
dim mycountries=New Hashtable
mycountries.Add("N","Norway")
mycountries.Add("S","Sweden")
mycountries.Add("F","France")
mycountries.Add("I","Italy")
rb.DataSource=mycountries
rb.DataValueField="Key"
rb.DataTextField="Value"
rb.DataBind( )
end if
end sub
</script>
|
در نهایت کد کامل صفحه به صورت زیر خواهد شد . به کد دقت نمایید ، در ادامه به توضیح
آن خواهیم پرداخت :
|
کد
|
<script runat="server">
Sub Page_Load
if Not Page.IsPostBack
then
dim mycountries=New Hashtable
mycountries.Add("N","Norway")
mycountries.Add("S","Sweden")
mycountries.Add("F","France")
mycountries.Add("I","Italy")
rb.DataSource=mycountries
rb.DataValueField="Key"
rb.DataTextField="Value"
rb.DataBind( )
end if
end sub
</script>
<html>
<body>
<form id="Form1" runat="server">
<asp:RadioButtonList id="rb" runat="server" AutoPostBack="True"
/>
</form>
</body>
</html>
|
|
خروجی
|
مشاهده خروجی مثال
|
توضیح کد فوق :
- در ابتدا یک دستور شرطی چک می کند که آیا صفحه از سرور بازگشته ( Page.IsPostBack )
یا خیر . اگر از سرور باز نگشته بود ( یعنی برای اولین بار است که اجرا می شود ) شی
mycountrires که از نوع HashTable بوده را ایجاد و اعضای آن را اضافه می کند .
- در خط بعدی ، شی mycountrires به عنوان منبع داده ای ( DataSource ) برای کنترل با
id برابر با rb که یک کنترل از نوع asp:RadioButtonList است ، تعیین شده است .
- سپس به ترتیب کلیدها ( " key " ) و مقادیر ( " Values " ) ، به عنوان مقادیر واقعی
( DataValueField ) و مقدار متنی ( DataTextValue ) کنترل rb تعیین شده اند .
در این حالت کلیدها به عنوان مقادیر واقعی هر آیتم کنترل لسیت وار asp:RadioButtonList
و " Value " به عنوان متن آیتم نشان داده خواهند شد .
- در آخر نیز با استفاده از متد ( )DataBind ، عمل اتصال کنترل سرور به شی HashTable
انجام شده است .
نمایش متن آیتم انتخاب شده در کنترل لیست وار ASP.Net :
در مرحله آخر از راهکار ، همانطور که در کد زیر مشاهده می کنید ، قطعه کد دیگری نوشته
ایم که به وسیله آن ، هر گاه کاربر بر روی یکی از آیتم های کنترل لیست وار asp:RadioButtonList
کلیک نماید ، اجرا شده و متن آن آیتم را نشان می دهد . قطعه کد جدید ایجاد شده را به
صورت Bold نمایش داده ایم . توجه داشته باشید که تابع
displayMessage درون متد onSelectedIndexChanged کنترل asp:RadioButtonList
قرار گرفته است که به محض کلیک بر روی هر آیتم اجرا می شود :
|
کد
|
<script runat="server">
Sub Page_Load
if Not Page.IsPostBack
then
dim mycountries=New Hashtable
mycountries.Add("N","Norway")
mycountries.Add("S","Sweden")
mycountries.Add("F","France")
mycountries.Add("I","Italy")
rb.DataSource=mycountries
rb.DataValueField="Key"
rb.DataTextField="Value"
rb.DataBind( )
end if
end sub
sub displayMessage(s as Object,e As EventArgs)
lbl1.text="Your favorite country is: " & rb.SelectedItem.Text
end sub
</script>
<html>
<body>
<form id="Form1" runat="server">
<asp:RadioButtonList id="rb" runat="server" AutoPostBack="True"
onSelectedIndexChanged="displayMessage" />
<p> <asp:label
id="lbl1" runat="server" /> </p>
</form>
</body>
</html>
|
|
خروجی
|
مشاهده خروجی مثال
|
توضیحات کد فوق :
در رویداد تغییر آیتم کنترل لیست وار مثال یعنی کنترل asp:RadioButtonList ، که رویداد
onSelectedIndexChanged است ، تابع ( )displayMessage را قرار داده ایم . این
رویداد متن آیتم انتخاب شده را همراه با یک متن ثابت به کاربر نمایش می دهد .
همچنین برای اینکه با تغییر آیتم انتخاب شده کنترل asp:RadioButtonList ، صفحه به سرور
ارسال ( PostBack ) شود و کدهای مورد نظرمان مجدد اجرا شوند ، مقدار خاصیت AutoPostBack
آن را بر روی True تنظیم کرده ایم ، تا به محض کلیک بر روی هر یک از آیتم های کنترل
، صفحه Refresh شود .
راجع این مطلب
سوال یا اشکالی دارید ؟! آن را در انجمن سایت مطرح نمایید ...
>>>>> ورود به انجمن تخصصی
نطر خودتان درباره این صفحه را با ما در میان گذاشته و در صورت تمایل از Developer1
حمایت نمایید :