PDA

View Full Version : استفاده از کنترل های وب در datalist



rainynight
شنبه 16 مهر 1384, 00:37 صبح
سلام من یه datalist دارم که در قسمت item template اون یک radio buttopn list قرار دادم که مقادیر Text اون از دیتابیس بایند میشن
وقتی می خوام مقدار انتخاب شده از بین 4 رادیو باتن را وارد دیتابیس کنم اصلا در codebehind رادیو باتن ها شناخته نشدن که بگم مقدار انتخابی وارد دیتابیس بشه
اسم رادیو باتن من rdo است ولی وقتی داخل دیتا لیست می گذارم چیزی به نام rdo.selecteditem.value وجود نداره
چطور میتونم به کنترل های موجود در datalist دست پیدا کنم؟؟؟

Behrouz_Rad
شنبه 16 مهر 1384, 12:34 عصر
صحبت در مورد ارجا به کنترل هایی که در کنترل های Container وجود دارند، اندکی وقت گیر است.
کدی که در لینک زیر قرار داده ام، پاسخگوی سوال شماست:
http://www.barnamenevis.org/forum/showthread.php?t=26216&page=1
موفق باشید.

rainynight
یک شنبه 17 مهر 1384, 00:16 صبح
دست شما درد نکنه که به سرعت جوابمو دادین ولی بهروز جان من این کد بسیار عالی شما رو قبلا خونده بودم وخیلی ازش استفاده کردم راسش از رو همون قبلا کد زیر رو نوشته بودم ولی اررور


Object reference not set to an instance of an object


میده مشکلش کجاست؟؟؟؟



Dim rad1 As New WebControls.RadioButton
Dim rad2 As New WebControls.RadioButton
Dim rad3 As New WebControls.RadioButton
Dim rad4 As New WebControls.RadioButton

For Each d As DataListItem In DataList1.Items

rad1 = CType(DataList1.FindControl("RadioButton1"), WebControls.RadioButton)

rad2 = CType(DataList1.FindControl("RadioButton2"), WebControls.RadioButton)
rad3 = CType(DataList1.FindControl("RadioButton3"), WebControls.RadioButton)
rad4 = CType(DataList1.FindControl("RadioButton4"), WebControls.RadioButton)

Next
If rad1.Checked = True Then
'somthing
ElseIf rad2.Checked = True Then
'somthing
ElseIf rad3.Checked = True Then
'somthing
ElseIf rad4.Checked = True Then

'somthing
End If

Behrouz_Rad
یک شنبه 17 مهر 1384, 17:48 عصر
دستورات فوق را در کدام روال می نویسید؟
برخی از دستورات اشتباه هستند!!!

rainynight
دوشنبه 18 مهر 1384, 15:34 عصر
در روال button click کجاش مشکل داره؟؟

Behrouz_Rad
دوشنبه 18 مهر 1384, 16:39 عصر
خوب دقت کنید...
به طور کلی، منطق کدهای شما اشتباست.
هدف شما:
ایجاد یک حلقه ی ...For Each Next به منظور بررسی وضعیت RadioButton های موجود در هر ردیف DataList

اشتباهات شما:
1) تعریف 4 متغیر جدا از نوع RadioButton
توضیح: یک متغیر به منظور ارجا به RadioButton موجود در هر ردیف کفایت می کند.
2) نیاز به دستور CType ندارید. (در ضمن، آرگومان اول دستور CType اشتباه نوشته شده - در این حالت، چنین دستوری نداریم)

رفع اشتباه:
تنها یک متغیر از نوع RadioButton تعریف کنید و به شکل زیر به آن ارجا پیدا کنید:


Dim rad1 As New WebControls.RadioButton
Rad1 = d.FindControl("myRadioButtonName")

موفق باشید.

rainynight
دوشنبه 18 مهر 1384, 20:09 عصر
مرسی بهروز جان که کمکم می کنید
1- من در هز سطر از دیتا لیستم 4 رادیو باتن دارم پس فکر کنم باید 4 تا متغیر از نوع رادیو باتن تعریف کنم
2- اگر دستور ctype رو حذف کنم زیر l rad1 = d.FindControl("RadioButton1")l خط سبز می کشه و خطا میگیره :
implicite conversation from system.web.ui.control to system.web.UI.webcontrosl.radiobutton

پس ناچار باید از ctype استفاده سود
3- من دقیقا مانند کد خود شما در اون دیتا گرید استفاده کردم و شما به همین ترتیب از ctype استفاده کرده بودید

Behrouz_Rad
دوشنبه 18 مهر 1384, 22:05 عصر
1) در هیچ کدام از پست هایتان به بودن 4 RadioButton در هر ردیف اشاره ای نکردید!
برداشت بنده، چهار سطر بود که در هر سطر یک RadioButton قرار دارد.
2) خیر خطایی رخ نمیده!
3) هر کدی روش خاص خودش رو می طلبه!

برای اطمینان بیشتر، کد زیر را نوشتم و خروجی را آن طور که حدس می زدم دیدم:


Private Sub btnAction_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAction.Click
Dim myRadio1 As WebControls.RadioButton
Dim myRadio2 As WebControls.RadioButton
Dim myRadio3 As WebControls.RadioButton
Dim myRadio4 As WebControls.RadioButton

For Each myItem As DataListItem In DataList1.Items
myRadio1 = myItem.FindControl("optCheck1")
myRadio2 = myItem.FindControl("optCheck2")
myRadio3 = myItem.FindControl("optCheck3")
myRadio4 = myItem.FindControl("optCheck4")
If myRadio1.Checked = True Then
Response.Write("<b>Item 1 is Selected!</b>")
ElseIf myRadio2.Checked Then
Response.Write("<b>Item 2 is Selected!</b>")
ElseIf myRadio3.Checked Then
Response.Write("<b>Item 3 is Selected!</b>")
ElseIf myRadio4.Checked Then
Response.Write("<b>Item 4 is Selected!</b>")
End If
Next
End Sub

خروجی برنامه:

http://hostedpictures.com/images/behrouz/radioindatalist.png
موفق باشید.

rainynight
سه شنبه 19 مهر 1384, 13:17 عصر
ببخشید بهروز جان فکر کنم هنوز نتونستم منظور خودم رو برسونم
بگذارید از اول توضیح بدم :
من می خوام یه امتحان چهار گزینه ای طراحی کنم برای این منظور تصمیم گرفتم از یک دیتالیست استفاده کنم
تعداد سطر های دیتالیست معلوم نیست چون از دیتابیس بایند میشه ولی در هر سطر چهار گزینه وجود داره
توی دیتابیس یه فیلد حاوی سوال امتحان هست یه 4 فیلد گزینه های سوال و یک فیلد هم جواب درست رو نگه داری می کنه
یه فیل دیگه هم قرار دادم که اون خالیه و وقتی پر میشه که کاربر به سوالات چهار گزینه ای پاسخ بده و جوابی که کاربر داده وارد این فیل شده و بافیلد جواب مقایسه میشه و ...
مشکل من اینجاست که توی فرمم نمیتونم مقداریو از بین چهار گزینه انتخاب شده دسترسی بهش پیدا کنم
دقیقا کارهایی که شما بالا انجام دادید هم انجام دادم ولی هیچ اتفاقی نمی افته و مقدار پیش فرض radiobutton رو نشون میده یعنی انتخاب من از بین اون چند گزینه هیچ تاثیری نداره :((
من مثلا radiobutton2 یعنی گزینه 2 رو چک زدم ولی اون وارد حلقه if radiobutton1.cheked نمیشه

rainynight
سه شنبه 19 مهر 1384, 13:50 عصر
مشکل این کد چیست؟
Dim rad1 As New WebControls.RadioButton
Dim rad2 As New WebControls.RadioButton
Dim rad3 As New WebControls.RadioButton
Dim rad4 As New WebControls.RadioButton
Dim label As New WebControls.Label
Dim updatesql As String
Dim cmd As OleDbCommand

For Each d As DataListItem In DataList1.Items

rad1 = d.FindControl("RadioButton5")
rad2 = d.FindControl("RadioButton6")
rad3 = d.FindControl("RadioButton7")
rad4 = d.FindControl("RadioButton8")
Label = d.FindControl("lbl1")

If rad1.Checked = True Then
updatesql = "update quiz set userj=1 "
ElseIf rad2.Checked = True Then
updatesql = "update quiz set userj=2 "
ElseIf rad3.Checked = True Then
updatesql = "update quiz set userj=3 "
ElseIf rad4.Checked = True Then

updatesql = "update quiz set userj=4 "
Else
updatesql = "update quiz set userj=ali "
End If
Response.Write(label.Text)

updatesql &= "where val(id)= '" & label.Text & "'"

con = New OleDbConnection(connectionstring)
cmd = New OleDbCommand(updatesql, con)
con.Open()
cmd.ExecuteNonQuery()
con.Close()

Behrouz_Rad
سه شنبه 19 مهر 1384, 14:02 عصر
احتمالا در زمان بایند کردن داده ها در روال Page_Load، دستور:


If Not IsPostBack Then

را فراموش کرده اید.

rainynight
پنج شنبه 21 مهر 1384, 01:23 صبح
آقا بهروز خیلی شرمندم کردید
ولی بازم کار نمیکنه
البته من تو روال page load فقط bind datalist دارم مشکل من اونجاست که اصلا اطلاعات وارد دیتابیس نمیشه و کدهای اصلی من تو روال button click هست
میشه کدهای منو تست کنید!!!
خیلی ممنون میشم

Behrouz_Rad
پنج شنبه 21 مهر 1384, 07:21 صبح
چند سوال:
1) در کدی که در آخرین پست صفحه ی قبل قرار دادید، علی یک مقدار رشته ای است و باید بین دو کاراکتر تک کوتیشن قرار بگیرد اما اینطور نیست!
2) دستور


updatesql &= "where val(id)= '" & label.Text & "'"

از نظر نحوی اشتباه است.
آیا نوع فیلد id در دیتابیس را از نوع رشته ای!!! در نظر گرفته اید که سعی در تبدیل آن به مقدار عددی معادل را دارید؟
اگر مقدار عددی معادل را مد نظر دارید، پس دلیل استفاده از تک کوتیشن بعد از این عبارت چیست؟
3) فکر نمی کنم، دستور (val(id از دستورات SQL باشد!!!

یک نکته ی دیگر را نیز احتمالا فراموش کرده اید.
RadioButton های موجود در در هر ردیف باید دارای مقدار GroupName یکسان و در عین حال متفاوت از RadioButton های موجود در ردیف های دیگر باشند تا در هر ردیف تنها یک RadioButton حق انتخاب شدن داشته باشد.
در ضمن، لطفا خودتون سعی در رفع مشکل بکنید.
موفق باشید.

rainynight
جمعه 22 مهر 1384, 23:58 عصر
ببخشید خیلی سرتونو درد آوردم فقط یه نکته عرض کنم و این تاپیکو ببندیم
نکته جالب اینجاست که اون برنامه که شما گذاشته بودید هم بخشی که برای delete کردن یک سطر بود کار نمیکنه
ممکنه اشکال از vs من باشه؟

Behrouz_Rad
شنبه 23 مهر 1384, 07:46 صبح
دشمنتون شرمنده باشه.
هدف ما چیزی جر کمک به دوستانمون در جهت رفع مشکلاتشون نیست.
در مورد مشکل پیش آمده هم والا چه عرض کنم!
از علم غیب پیامبری بهره ای نبرده ام!
موفق باشید. :لبخندساده