PDA

View Full Version : IndexChanging در DropDownList



venus_zohreh
چهارشنبه 05 مهر 1385, 12:58 عصر
سلام
مشکل من با DropDownList در ASP.Net است
من 3 تا DropDown دارم که قرار است گزینه ای که در اولی انتخاب می شود به عنوان ورودی دومی است و دومی بنا به گزینه اولی پر می شود و بنا به چیزی که در این دو انتخاب می شود ، DropDown سوم پر می شود
مشکل در این است که وقتی کاربر اولین آیتم نمایش داده شده در هر کدام از DropDownها را انتخاب می کند، رویداد IndexChanged اتفاق نمی افتد
به عبارت دیگر اگر کاربر اولین آیتم DropDown اول را انتخاب کند ، DropDownدوم اصلا پر نمی شود و به همین ترتیب DropDown سوم هم پر نمی شود و اصلا انگار داده ای به آن Bound نشده

می توانید به من کمک کنید ؟

reza_rad
چهارشنبه 05 مهر 1385, 13:21 عصر
خصوصیت aUTOPOSTBACK رو توی DROPDOWN ها TRUE کنید.

venus_zohreh
پنج شنبه 06 مهر 1385, 00:42 صبح
این کار را کردم
همه چیز درست کار می کند، فقط مشکل زمانی است که برای اولین بار کاربر همان اولین آیتمی را که به طور پبش فرض در DropDown اول هست را انتخاب کند
یعنی برای بار اول که Page لود می شود باید DropDown دوم و سوم هم پر باشند اما چون در DataBound هر کدام از آنها ورودی را کنترل DropDown قبلی معرفی کردم ، وقتی Page لود می شود DropDown دوم و سوم خالی است !

nazaninam
پنج شنبه 06 مهر 1385, 09:55 صبح
خوب این طبیعی که خالی باشند ؟ وقتی شما میگید drop down 2 ورودیشو از اولی میگیره خوب وقتی page load میشه که هنوز ورودی نگرفته
اگر هم به نظرتون زشت میاد که وجود داشته باشند visible اونارو false کنید

venus_zohreh
پنج شنبه 06 مهر 1385, 11:27 صبح
نه ، طبیعی نیست
چون وقتی Page لود می شه ،‌ DropDown اول خالی نیست و داده هایش را از DataBase گرفته.
حال اگر کاربر دقیقا همان آیتمی را بخواهد که هنگام Page Load شدن در DropDown اول هست ، یعنی اولین آیتم ، دو DropDown دیگر خالی می مانند
او حتما باید یکبار مثلا آیتک دوم یا سوم DropDown اول را انتخاب کند تا رویداد IndexChanged اتفاق بیفتد و دومی و سومی هم پر شوند و بعد دوباره برگردد و آیتم اول را انتخاب کند !

c#_web
پنج شنبه 06 مهر 1385, 12:22 عصر
فکر کنم برای اینکه مشکلت حل شود باید در page load صفحه ات ، به طور پیش فرض متغیری که index از dropdown اول را مقداردهی میکند ، برابر index اول از dropdown اولت باشد.
یا اینکه کافی است در page load از صفحه ات عنصر اول از dropdown1 را selected قراردهی.
مثلاً:


dropdown1.selectedindex=0;

Behrouz_Rad
پنج شنبه 06 مهر 1385, 13:00 عصر
باید خودت روال IndexChanged رو در اولین مرتبه فراخونی کنی.
پس از بررسی شرط PostBack نبودن صفحه و بایند DropDownList اصلی در روال Page_Load، ، روال SelectedIndexChanged اون رو به شکل زیر فراخونی کن:


Me.DropDown1_SelectedIndexChanged(DropDownList1, e)

در روال SelectedIndexChanged کنترل DropDownList اول نیز باید روال SelectedIndexChanged کنترل DropDownList دوم رو فراخونی کنی.


Me.DropDownList2_SelectedIndexChanged(sender, e)

فرایند بایند DropDown اول در روال Page_Load و بایند DropDownList دوم در روال SelectedIndexChanged کنترل DropDown اول و بایند DropDownList سوم در روال SelectedIndexChanged کنترل DropDownList دوم انجام می پذیره.

موفق باشید.

venus_zohreh
پنج شنبه 06 مهر 1385, 14:44 عصر
مشکل اینه که باید داده های DropDown از دیتا بیس پر شود و این کار را اگه خودم بخوام بکنم ، داده ها درست بایند نمی شن و کلی مشکل داره
من این کار را به طور اتوماتیک در خود DropDown ها انجام دادم
سوالمو جور دیگه مطرح می کنم
فرض کنید دو تا DropDown دارم که آیتم انتخابی در اولی به عنوان ورودی دومی است
حال فرض کنید به خاطر ورودی های قبلی کاربر در DropDown اول تنها یک آیتم وجود دارد
در این صورت هرگز رویداد IndexChangedاتفاق نمی افتد حتی اگر کاربر بارها روی این تنها آیتم کلیک کند !!!
چطوری این مشکل رو حل کنم ؟
وقتی DropDown فقط شامل یک آیتم باشد ، هرگز IndexChanged اتفاق نمی افتد !

Y2K
پنج شنبه 06 مهر 1385, 15:32 عصر
مشکل اینه که باید داده های DropDown از دیتا بیس پر شود و این کار را اگه خودم بخوام بکنم ، داده ها درست بایند نمی شن و کلی مشکل داره
من این کار را به طور اتوماتیک در خود DropDown ها انجام دادم

چه مشکلاتی





یه روش اینه که dropdown اولی رو بصورت دستی پر کنی و قبل از اینکه دیتابیس رو بریزی داخلش یه خط مثلا: یک گزینه رو انتخاب کنید . اضافه کنی
مثل کد زیر



City.Items.Clear();
City.Items.Add("شهر خود را انتخاب کنید");

while(readcity.Read())
{
ListItem list= new ListItem(readcity.GetValue(1).ToString(),readcity. GetValue(0).ToString());
City.Items.Add(list);
}

که city نام dropdownlist است
و داده ها رو دونه دونه از توی دیتاریدر می خونه و داخل اون قرار میده
در آخر هم


City.SelectedIndex=0