PDA

View Full Version : کمک در مورد Dropdownlist



Khalil morradi
شنبه 31 فروردین 1387, 14:03 عصر
دوستان!
من توی صفحاتم که به VB.NET نوشتم یک مشکلی با dropdownlist دارم که بصورت ذاینامیک ایجادش کردم و بصورت داینامیک هم پر میکنم مشکل من اینه که علیرغم اینکه من Postback=true کردم و handller مربوط به selectedindexchange رو هم براش تعریف کردم ولی وقتی که گزینه ای را از توی اون انتخاب میکنم برای بار اول مقدار index و یا value رو نمیگیره اما برای بارها بعدی میگیره اما همیشه مقدار value انتخاب شده قبلی رو برمیگردونه نمی دونم چکار کنم که با هر بار تغییر ایندکس دقیقا همون مقدار اتخاب شده فعلی برگرده نه مقدار انتخاب شده قبلی توی MSDN هم توضیحی که داده رو انجام داده اما کار نکرد خواهش میکنم راهنمایی ام کنید
ببخشید من این موضوع رو توی فروم خیلی گشتم ولی چیزی به نفع این مشکل پیدا نکردم

twelve
شنبه 31 فروردین 1387, 14:26 عصر
کدی رو که نوشتی بذار اینجا تا مشکل راحت تر حل بشه

Khalil morradi
یک شنبه 01 اردیبهشت 1387, 15:06 عصر
مثلا یک کد مشابه این که همینطوری کار می کنه میتونید امتحان کنید





ProtectedSub Page_Load(ByVal sender AsObject, ByVal e As System.EventArgs) HandlesMe.Load
Dim dropdownlist1 AsNew DropDownList
dropdownlist1.Items.Add("Item1")
dropdownlist1.Items.Add("Item2")
dropdownlist1.Items.Add("Item3")
dropdownlist1.Items.Add("Item4")
dropdownlist1.Items.Add("Item5")
dropdownlist1.Items.Add("Item6")
dropdownlist1.Items.Add("Item7")
dropdownlist1.Items.Add("Item8")
dropdownlist1.AutoPostBack = True

AddHandler dropdownlist1.SelectedIndexChanged, AddressOfMe.DropDownList1_SelectedIndexChanged
PlaceHolder1.Controls.Add(dropdownlist1)
Response.Write(ViewState("IndexOfDropdownlist1"))
EndSub

ProtectedSub DropDownList1_SelectedIndexChanged(ByVal sender AsObject, ByVal e As System.EventArgs)
Dim dropdownlist1 As DropDownList
dropdownlist1 = sender
ViewState("IndexOfDropdownlist1") = dropdownlist1.SelectedIndex
EndSub

raravaice
یک شنبه 01 اردیبهشت 1387, 15:15 عصر
از if not ispostback توی page_load استفاده کن که مقادیر با هر بار لود صفحه به حالت اولیه بر نگرده.

موفق باشید

twelve
یک شنبه 01 اردیبهشت 1387, 15:15 عصر
در تایید فرمایش raravaice :


dropdownlist1 = sender

این اشتباهه! کد صحیح :


Dim Dr As DropDownList = New DropDownList
Dr = DirectCast(sender, DropDownList)

Khalil morradi
یک شنبه 01 اردیبهشت 1387, 16:14 عصر
از if not ispostback توی page_load استفاده کن که مقادیر با هر بار لود صفحه به حالت اولیه بر نگرده.


ولی من اگر از if not ispostback استفاده کنم بعد از اولین postback شدن دیگه من این کنترل را نخواهم داشت در صورتیکه من نیاز دارم که باشه و فقط مقدارش عوض بشه که بر اساس اون من بقیه صفحه را بسازم


در تایید فرمایش raravaice :

این اشتباهه! کد صحیح :


Dim Dr As DropDownList = New DropDownList
Dr = DirectCast(sender, DropDownList)


حق با شماست اشتباه از من بود متشکرم ولی این هم مشکل رو حل نمی کنه

twelve
یک شنبه 01 اردیبهشت 1387, 17:13 عصر
Dim dropdownlist1 AsNew DropDownList
dropdownlist1.Items.Add("Item1")
dropdownlist1.Items.Add("Item2")
dropdownlist1.Items.Add("Item3")
dropdownlist1.Items.Add("Item4")
dropdownlist1.Items.Add("Item5")
dropdownlist1.Items.Add("Item6")
dropdownlist1.Items.Add("Item7")
dropdownlist1.Items.Add("Item8")
dropdownlist1.AutoPostBack = True
AddHandler dropdownlist1.SelectedIndexChanged, AddressOfMe.DropDownList1_SelectedIndexChanged
PlaceHolder1.Controls.Add(dropdownlist1)
Response.Write(ViewState("IndexOfDropdownlist1"))
EndSub
ProtectedSub DropDownList1_SelectedIndexChanged(ByVal sender AsObject, ByVal e As System.EventArgs)
Dim dropdownlist1 As DropDownList
dropdownlist1 = sender
ViewState("IndexOfDropdownlist1") = dropdownlist1.SelectedIndex
EndSub

کد ها رو توی Page_Load نذارشون ، بذار توی یک Sub و بعد از ساختنش یه select بنویس واسه ایتم انتخاب شدش ، بعد بقیه کارهای ساخت صفحه رو توی یک یا چند sub (بستگی به نیازت) قرار بده و توی handler مربوط به dropdownlist بر اساس ایتم انتخاب شده sub مورد نظر رو call کن. ، اگر از کوئری استرینگ هم کمک بگیری بد نمیشه.

adonis
یک شنبه 01 اردیبهشت 1387, 20:00 عصر
من این مشکل رو داشتم فقط و فقط به دو دلیل این اتفاق می افته:
کنترلی که داینامیک می سازید باید حتما بهش ID بدید و دادن نام به تنهایی کفایت نمیکنه. مثلا

dropdownlist1.ID='ddl'
و دیگه اینکه افزودن اون کنترل به صفحه حتما توی هر postback انجام بشه مثلا بذاریدش تو page_load

Khalil morradi
دوشنبه 02 اردیبهشت 1387, 11:39 صبح
کد ها رو توی Page_Load نذارشون ، بذار توی یک Sub و بعد از ساختنش یه select بنویس واسه ایتم انتخاب شدش ، بعد بقیه کارهای ساخت صفحه رو توی یک یا چند sub (بستگی به نیازت) قرار بده و توی handler مربوط به dropdownlist بر اساس ایتم انتخاب شده sub مورد نظر رو call کن. ، اگر از کوئری استرینگ هم کمک بگیری بد نمیشه.

من اینکار رو کردم ولی مشکل حل نشد البته من مقدار برگشتی رو برای stored procedure بعنوان یک پارامتر پاس میکنم و مقدارهای بعدی رو از اون میگیرم که این خیلی مهم نیست من الان مقدار جاری رو حتی با روشی که شما فرمودید هم نتونستم بگیرم البته شاید من اشتباه میکنم لطفا اگر اگر اگر امکان داره یک راهنمایی دیگه یا در صورت امکان یک نمونه کد بدید ممنون میشم


من این مشکل رو داشتم فقط و فقط به دو دلیل این اتفاق می افته:
کنترلی که داینامیک می سازید باید حتما بهش ID بدید و دادن نام به تنهایی کفایت نمیکنه.


اینو هم الان امتحان میکنم



و دیگه اینکه افزودن اون کنترل به صفحه حتما توی هر postback انجام بشه مثلا بذاریدش تو page_load

الان توی page_load هستش

twelve
دوشنبه 02 اردیبهشت 1387, 12:07 عصر
من اینکار رو کردم ولی مشکل حل نشد البته من مقدار برگشتی رو برای stored procedure بعنوان یک پارامتر پاس میکنم و مقدارهای بعدی رو از اون میگیرم که این خیلی مهم نیست من الان مقدار جاری رو حتی با روشی که شما فرمودید هم نتونستم بگیرم البته شاید من اشتباه میکنم لطفا اگر اگر اگر امکان داره یک راهنمایی دیگه یا در صورت امکان یک نمونه کد بدید ممنون میشم

امکان نداره لابد یه جایی رو دارید اشتبه میکنید.
کدهای داخل ساب روتین selectedindexchange رو عوض کردید؟ اگر اره بذارید ببینم

Khalil morradi
دوشنبه 02 اردیبهشت 1387, 13:16 عصر
امکان نداره لابد یه جایی رو دارید اشتبه میکنید.
کدهای داخل ساب روتین selectedindexchange رو عوض کردید؟ اگر اره بذارید ببینم

ساب روتین رو من اصلا دست نزدم همونیه که بالا میبینید

twelve
دوشنبه 02 اردیبهشت 1387, 13:36 عصر
واقعا عجیبه اینی که میگی
من یک نمونه برنامه نوشتم برات که عین ساعت کار میکنه!
در این مثال من از placeholder استفاده کردم ، که ای دیش هم ph1 هست



Private Drp As DropDownList


PrivateSub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesMyBase.Load
'Put user code to initialize the page here
CreateDropDownList()

EndSub




PublicSub CreateDropDownList()
Drp = New DropDownList
Drp.ID = "Drp1"
Drp.AutoPostBack = True
Drp.Items.Insert(0, "House")
Drp.Items.Insert(1, "Car")
Drp.Items.Insert(2, "Basket")
AddHandler Drp.SelectedIndexChanged, AddressOf Drp_SelectedIndexChanged
ph1.Controls.Add(Drp)



EndSub
PrivateSub Drp_SelectedIndexChanged(ByVal s AsObject, ByVal e As EventArgs)
Drp = New DropDownList
Drp = DirectCast(s, DropDownList)
If Drp.SelectedIndex = 0 Then
Response.Write("House Is Selected")
ElseIf Drp.SelectedIndex = 1 Then
Response.Write("Car Is Selected")
ElseIf Drp.SelectedIndex = 2 Then
Response.Write("Basket Is Selected")
EndIf
EndSub

Khalil morradi
دوشنبه 02 اردیبهشت 1387, 14:22 عصر
خیلی خیلی متشکرم
با کدهای ارسالی شما مشکل من حل شد ولی من هنوز نفهمیدم مشکل کجاست تنها فرقی که کد نویسی من با شما داشت در قسمت اضافه کردن آیتمها من از

dropdownlist1.Items.Add("Item1")

و شما از


Drp.Items.Insert(0, "House")

آیا ممکن است اشکال از این باشد