PDA

View Full Version : انتخاب ایتم های dropdownlist دوم بر اساس dropdownlist اول



fereshte22
سه شنبه 29 اسفند 1385, 20:50 عصر
سلام .هنوز چند ساعتی به تحویل سال جدید مونده.من پیشاپیش سال جدید را تبریک میگم.
اما مشکل من
من میخواستم بدونم چه طوری میشه از دو تا کنترل dropdownlist استفاده کرد که ایتم های کنترل دومی بر اساس انتخاب کنترل اولی انتخاب شوند.
مثلا من دو تا فیلد سرشاخه و زیر شاخه دارم .هر سر شاخه از تعدادی زیر شاخه تشکیل شده است. میخواهم وقتی صفحه لود میشود همه سرشاخه ها در کنترل اولی ظاهر شوند و وقتی یکی از سرشاخه ها را انتخاب میکنم زیر شاخه های ان همان لحظه در dropdownlist دومی ظاهر شود.

Alireza_Salehi
سه شنبه 29 اسفند 1385, 21:46 عصر
اگر از دیتابیس استفاده کردید (Binding Source) منبع داده دومی رو بر اساس مقدار (value) انتخاب شده در اولی فیلتر کنید!

fereshte22
سه شنبه 29 اسفند 1385, 22:37 عصر
دوست عزیز میشه بیشترتوضیح بدهید.ممنون میشوم

مهدی نان شکری
چهارشنبه 01 فروردین 1386, 14:04 عصر
با سلام وتبریک سال نو
من یک مثال نوشتم که دو تا کمبو باکس داره . اولی مربوط به کشوره. با انتخاب کشور شهر های اون کشور در کمبو دوم فیلتر می شن.
امید وارم به کارتون بیاد.

fereshte22
جمعه 03 فروردین 1386, 15:28 عصر
من برنامه ای را که شما فرستاده بودید اجرا کردم.ولی در قسمت زیر خطا میدهد


cmd.Connection.Open()

و برنامه اجرا نمیشود.
نمیدونم مشکلش چیه؟

مهدی نان شکری
جمعه 03 فروردین 1386, 20:16 عصر
من بانک رو نفرستادم. منظوره من بیان روش حل مسئله بود.

fereshte22
سه شنبه 07 فروردین 1386, 18:48 عصر
سلام
از اونجایی که من تحت وب کار میکنم به این صورت عمل کردم که به جای DisplayMember ,ValueMember از DataMember ,DataValueField استفاده کردم.چون حدس زدم معادلش تحت وب به همین صورت باشد.در ضمن دو تا datasourece برای جدول های شهر و کشور به صورت ویزاردی ایجاد کردم و کنترل های dropdownlist را به این دوتا datasourece بایند کردم و بقیه کدهای برنامه شما را هم که شامل ددستورات if بود به همان صورت استفاده کردم .ولی نمیدونم چرا از datasourece ها ایراد میگیرد؟
شما تحت وب کار کردید؟میتونید معادل برنامه خود را برای webapplication برام بفرستید.
البته من روش کاررا متوجه شدم ولی نمیدونم چرا جواب نمیدهد.
اگه راهنمایی کنید خیلی ممنون میشوم.

fereshte22
شنبه 18 فروردین 1386, 11:18 صبح
سلام
راستش چند روزی بود که بیخیال این مشکل شده بودم ولی دوباره به اون احتیاج پیدا کردم
راستش من کدی را که یکی از دوستان برام فرستاده بود به این صورت در برنامه نویسی تحت وب تبدیل کردم
اما اصلا ایتم های کنترل دومی نمایش داده نمیشود.


Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not (Page.IsPostBack) Then
Me.cmbcountry.DataTextField = "Name_vc"
Me.cmbcountry.DataValueField = "CountryID"
End If
End Sub
Private Sub cmbCountry_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbCountry.SelectedIndexChanged
If Me.cmbCountry.SelectedIndex > -1 Then
Dim new1 As String = "CountryID = " + cmbCountry.SelectedValue.ToString
' Me.ds .Tables("City_T").DefaultView.RowFilter = new1)
'Me.cmbCity.DataSource = ds.Tables("City_T")
Me.cmbCity.DataValueField = "CityID"
Me.cmbCity.DataTextField = "Name_vc"
Else
Me.cmbCity.DataSource = Nothing
End If
End Sub


در ضمن دو تا کنترل را به datasource های مربوطه به صورت ویزاراردی بایند کرده ام.
کسی میتونه بگه مشکل این کد چیه؟
یا هر روش دیگری سراغ دارید من را راهنمایی کنید

pooyamirzapour
یک شنبه 19 فروردین 1386, 10:26 صبح
shoma mitoonid ye bindingsource ijad konid ke datasource oon bindingsourcei bashe ke combo avvali be oon binde va datamember oon relatione bashe ke do ta jadvalo be ham marboot mikone va combo dovomiro be in bindingsourcr jadid bind konid intori niazi be code nevisi nist va khod be khod filter mishe

شما می تونید یه bindingsource ایجاد کنید که datasource اون bindingsource ای باشه که کومبو اولی به اون باینده و datamember اون ریلیشنی باشه که 2 تا جدول رو با هم مربوط می کنه و کومبو دومی رو به این bindingsourcr جدید بایند کنید. این طوری نیازی به کد نویسی نیست و خود به خود فیلتر میشه

Alireza_Salehi
یک شنبه 19 فروردین 1386, 11:45 صبح
اصلا کد نویسی لازم نداره!
مثلا دو تا جدول شهر(id,name,countryid) و کشور(id,name) داریم.

شما اول دو تا DropDownList بذار روی فرم (مثلا بانام های ddlCity و ddlCountry)، بعد ddlCountry رو به جدول کشور وصل کن (DataValueField به id و DataTextField به name) ،
بعد خاصیت AutoPostBack این کنترل رو True کن.

حال ddlCity رو موقع وصل کردن به جدول شهر در صفحه انتخاب جدول برای دیتاسورس (عکس 1) دکمه WHERE رو بزن و مطابق عکس 2 تنظیم کن و OK کن.برای این کنترل هم DataValueField به id و DataTextField به name باشند.

همین هیچ کدی هم نمی خواد!

نکته : برای این که رویداد SelectedIndexChanged عمل کنه باید AutoPostBack روی True باشد.

fereshte22
دوشنبه 20 فروردین 1386, 09:15 صبح
اصلا کد نویسی لازم نداره!

.
سلام
دوست عزیز راهنمایتون خیلی روشن و مفید بود.و کاری که میخواستم را انجام دادم فقط یه مشکلی که هست اینه که از اونجایی که من دارم فروشگاه اینترنتی کار میکنم و این فروشگاه قراره برای بیشتر از یک دیتا بیس کار کند ترجیح میدهم که کد نویسی کار کنم که فقط لازم باشد که رشته اتصال را تغییر بدم و نخواهم هر دفعه دیتا سورس را تغییر بدم.
اگه نمونه کد برای این برنامه را هم برای من بفرستید خیلی ممنون میشوم.
در ضمن یه مشکل دیگر هم دارم و اون این است که چون اطلاعات دو تا کنترل در دیتا بیس ذخیره میشود اگر کنترل اولی زیر شاخه ای در کنترل دومی نداشته باشد برنامه خطا میدهد .نمیدونم چه طوری این مشکل را حل کنم؟

Alireza_Salehi
دوشنبه 20 فروردین 1386, 10:07 صبح
در این مثال هر دو روش "کاملا ویژوال" و "کاملا کد نویسی" رو گذاشتم.

فقط دوباره میگم برای این که رویداد SelectedIndexChanged مقدار مناسب رو برگردونه و عمل کنه AutoPostBack در DropDownList مورد نظر باید True باشه.

منظورتون رو از زیر شاخه متوجه نشدم؟

fereshte22
دوشنبه 20 فروردین 1386, 13:41 عصر
سلام
خیلی ممنون
لطف کردید.فقط یه مشکل دیگه البته خیلی ببخشیدا
نمیشه ایتم های کنترل دومی بدون refresh انتخاب شوند؟
در مورد زیر شاخه منظور من همان اسامی شهر ها برای هر کشور بود .چون من یه قسمتی دارم که برای هر کالا یه سر شاخه و برای هر سرشاخه یه زیر شاخه دارم.و وقتی یه سر شاخه زیر شاخه ای نداشت و من میخواستم این اطلاعات را در دیتا بیس ذخیره کنم خطا میداد که با کد زیر که در برنامتون بود حلش کردم




If drpzirshakheh.Items.Count Then
zirshakheh1 = drpzirshakheh.SelectedItem.Text
Else : zirshakheh1 = "null"

بازم ممنون

Alireza_Salehi
دوشنبه 20 فروردین 1386, 19:51 عصر
نمیشه ایتم های کنترل دومی بدون refresh انتخاب شوند؟


چرا نشه ،از جاوا اسکریپت یا Ajax استفاده کنید.قبلا فکر کنم پرسیدن جستجو کنید.(البته در تالار ASP.NET نه اینجا)

azygole
شنبه 22 دی 1386, 22:06 عصر
خیلی ممنون از مثال زیبای شما آقای arsp_2004 . اما آیا می دانید اگر این جداول به سه جدول برسند در حالی که هر DropDownList تنها یک DataDieldValue دارد چه اتفاقی می افتد ؟ میتوان برای ایجاد ارتباط پارامتر مربوط به جدول دوم را به DropDownList اول و پارامتر اول مربوط به جدول سوم را به DropDownList اول و پارامتر دوم مربوط به جدول سوم را به DropDownList دوم متصل کرد و خیلی راحت این ارتباطات برقرار می شوند . یک مثال هم به پیوست اضافه می کنم البته این مثال به C# است اما امیدوارم مورد استفاده قرار بگیرد .