PDA

View Full Version : combobox



dalaho
دوشنبه 03 مرداد 1384, 09:43 صبح
سلام
من مقادیر یک ستون از جدول sql را درون یک combo box ریخته ام اما هر عنصری از آن را که
انتخاب می کنم فقط عنصر اول آن انتخاب می شود
لطفآ کمک کنید

Kamran.K
دوشنبه 03 مرداد 1384, 10:06 صبح
لطفا کد!

ببین نکات زیر رو انجام میدی؟
1. DataSource
2. ValuMember
3. Display Member
4. هنگام انتخاب: SelectedValue

mohsen99
دوشنبه 03 مرداد 1384, 16:09 عصر
با هر بار postback مقادیر combobox از اول پر میشه
بنابر این کد بایند کردن combobox را داخل
if(!ispostback()) 0
قرار بدید

dalaho
سه شنبه 04 مرداد 1384, 11:43 صبح
من یک کلاس دارم
[code]
public DataSet showUsers(){
try{
selectCommand.CommandText = "SELECT name FROM users";
if(dataSet.Tables["users"] != null)
dataSet.Tables["users"].Clear();
adapter.Fill(dataSet,"log");
return dataSet;
}
catch(Exception exp){
return null;
}
[code/]
و جهت انتخاب و پر کردن هم از این استفاده میکنم
[code]
data.ShowComboBox db = new data.ShowComboBox();
computernameDropDownList1.DataSource=db.showUsers( );
computernameDropDownList1.DataTextField="name";
computernameDropDownList1.DataBind();
[code/]

dalaho
شنبه 08 مرداد 1384, 07:54 صبح
پس چرا هیچکی جوابم نمی ده؟؟؟؟؟؟؟؟؟؟؟؟؟

Kamran.K
شنبه 08 مرداد 1384, 09:22 صبح
در windows Application


cmbSubMajor.DataSource = //اینجا دیتاست خود را تولید کنید;
cmbSubMajor.DisplayMember = "SubMajorName";// اینجا نام فیلد جهت نمایش
cmbSubMajor.ValueMember = "SubMajorID";//اینجا نام فیلد جهت بازگرداندن کلید انتخاب شده


در Web Application


Categories tmpCategories = new Categories();
cbMainCategory.DataSource = tmpCategories.GetCategories();
cbMainCategory.DataTextField = "CategoryTitle";
cbMainCategory.DataValueField = "CategoryID";
cbMainCategory.DataBind();

کلاس Categories مثالی از کلاس یک پروژه‌ی نمونه است که متد GetCategories() آن یک دیتاست برمی‌گرداند.
یک پیشنهاد: نام‌هایی که برای متدها و کلاس‌های پروژه تعیین کرده‌ای، قدری گنگ هستند!! از نام‌هایی گویاتر استفاده کن.

dalaho
شنبه 08 مرداد 1384, 09:56 صبح
ممنون از راهنمایی شما
اگه ممکنه در مورد کلاس Categories مقداری بیشتر توضیح د هید خصو صآ CategoryID و نحوه ساخت آن

Kamran.K
شنبه 08 مرداد 1384, 14:40 عصر
جهت رفع ابهام ویرایش شد.

کلاس Categories مثالی از کلاس یک پروژه‌ی نمونه است که متد GetCategories() آن یک دیتاست برمی‌گرداند.
بخش‌هایی از کدهای این کلاس نمونه:


public SqlDataReader GetItemByID(String CategoryID)
{
SqlCommand Cmd = new SqlCommand("Select * from Categories where
CategoryID="+CategoryID.ToString(),Connection);

Connection.Close();
Connection.Open();
SqlDataReader Reader = Cmd.ExecuteReader();
return Reader;
Connection.Close();
}

امیدوارم مفید باشه

once4ever
پنج شنبه 25 اسفند 1384, 17:02 عصر
سلام
من یک compbox دارم با چندتا textbox - بوسیله dataadapter و dataset و DataViewManager یک ویو ساختم و با combobox و تکست باکسها بیند کردم.
حالا میهوام یه تغییری تو یکی از تکست باکسهام بدم قبل از اینکه پرش کنم.
یعنی میهوام: وقتی combobox عوض شد - مقدار یکی از ستونهای معادل اون رکورد رو داخل یک رشته بریزم و تغییرات بدم و اینبار داخل تکست باکس نشونش بدم.

ali_kolahdoozan
پنج شنبه 25 اسفند 1384, 17:47 عصر
من که نفهمیدم میخواهید چیکار کنید میشه توضیح بدید

once4ever
پنج شنبه 25 اسفند 1384, 18:25 عصر
ببین یک combobox هست و 3تا textbox
کارشون اینه که وصل بانک میشم (و یه دیتاست رو پر میکنم و با چیزهایی که بالا گفتم)
این combobox آیدیهارو نشون میده و textbox ها هم نام و فامیل اون آیدی رو نشون میدن
هربار combobox تغییر میکنه اون تکست باکها هم تغییر میکنند.
اینو چجوری انجام بدم؟
(اینو بهم بگو تا بگم مشکل اصلیم چیه )

ali_kolahdoozan
جمعه 26 اسفند 1384, 12:07 عصر
شما میخواهی در اصل currency داشته باشی یعنی با تغییر مثلا شماره در combo تکست باکسها هم تغییر کنن . اگه مشگلت همین باشه و تائید کنی همینه حلش 30 ثانیه برام کار داره فقط اعلام کن

once4ever
جمعه 26 اسفند 1384, 12:18 عصر
بله مشکلم من اینه
الان با تابعی که تغییرات combo رو چک میکنه و dataset اینو درستش کردم ولی میهوام از view استفاده کنم.
(کار خودته ;) )

ali_kolahdoozan
جمعه 26 اسفند 1384, 14:07 عصر
شما باید از currency manager استفاده کنید ربطی به view و غیره نداره . برای اتصال combo به یک فیلد شما چکار می کنید حتما یکی یکی رکوردها رو می خوانید و به درون combo می فرستید یا هر روشی دیگری . اما کاری که باید بکنید این است که هر آبجکت مثل textbox یا کمبو یا هر شئی دیگه ای رو بوسیله این دستور وصل کنید :
combobox1.DataBindings.Add("text", DATASETNAME, "TABLENAME,FIELDNAME");
خوب حالا اگه همه اشیاء این ریختی وصل بشن دیتابیس بینشون تناضر بجود می اید مثلا اگه کد 12 توی COMBO انتخاب بشه بقیه فیلدها هم روی رکوردی که کدش 12 هست ست میشه . اگه بازم سوالی بود من تا عید هستم بعدش کل 13 روز مسافرتم

once4ever
جمعه 26 اسفند 1384, 15:07 عصر
(خوبه خوش بگذره بهت)

حالا رسیدیم به مشکل من:
من همینکارو کردم و همه چیز درسته. یکی از textbox ها مربوط به password هست که من encode شده توبانک گذاشتم و اینجا هم encode شده نشونم میده . ولی من میخوام decode کنم بعد بزارمش تو تکست باکس.
حالا چیکار کنم؟
خواستم این مقدارو به یک رشته bind کنم و بعد مقدار رشته ای که عوض شده رو به تکست باکس bind کنم اما نمیدونم چجوری!!!

behzad_gh
جمعه 26 اسفند 1384, 15:49 عصر
برای این کار می‌تونی از کد زیر استفاده کنی
البته این کد درارای رویدادهایی برای تبدیل نوع دسیمال و کارنسی است که شما باید اونها رو به کدهای مربوط به encode و Decode تغییر بدهی


private void DecimalToCurrencyString(object sender, ConvertEventArgs cevent)
{
// The method converts only to string type. Test this using the DesiredType.
if(cevent.DesiredType != typeof(string)) return;

// Use the ToString method to format the value as currency ("c").
cevent.Value = ((decimal) cevent.Value).ToString("c");
}

private void CurrencyStringToDecimal(object sender, ConvertEventArgs cevent)
{
// The method converts back to decimal type only.
if(cevent.DesiredType != typeof(decimal)) return;

// Converts the string back to decimal using the static Parse method.
cevent.Value = Decimal.Parse(cevent.Value.ToString(),
NumberStyles.Currency, null);
}

private void BindControl()
{
// Creates the binding first. The OrderAmount is a Decimal type.
Binding b = new Binding
("Text", ds, "customers.custToOrders.OrderAmount");
// Add the delegates to the event.
b.Format += new ConvertEventHandler(DecimalToCurrencyString);
b.Parse += new ConvertEventHandler(CurrencyStringToDecimal);
text1.DataBindings.Add(b);
}
اگه مشکلی بود ما در خدمتیم.

ali_kolahdoozan
جمعه 26 اسفند 1384, 15:53 عصر
پس ببین مشگلت رو درست توضیح نداده بودی .

once4ever
جمعه 26 اسفند 1384, 16:07 عصر
(قبل از اینکه چک کنم)
چرا علی جان تو پست اولم گفتم ولی بعدش میخواستم بفهمی چی میگم اینه که تیکه تیکه گفتم.
حالاهم آقا بهزاد گل درست سروقت رسید (مرسی بهزادجان)
ما همچنان مخلص علی آقای گلمون هستیم
چک میکنم برمیگردم;)

once4ever
جمعه 26 اسفند 1384, 17:32 عصر
من که نفهمیدم چی شد؟!
ببن این کد نوشتم:


private void myparse(object sender, ConvertEventArgs cevent)
{
}
private void myformat(object sender, ConvertEventArgs cevent)
{
}

...
sqlQuery ="SELECT * FROM UserTable;";
dAdapter = new OleDbDataAdapter(sqlQuery,this.myOleDbcon);

dset = new DataSet();
int numrows=dAdapter.Fill(dset);

this.cbUserId.DataBindings.Add("Text", dset, "UserTable.id");

Binding b = new Binding("Text", dset, "UserTable.UserPass");
b.Format += new ConvertEventHandler(myformat);
b.Parse += new ConvertEventHandler(myparse);
this.userPass.DataBindings.Add(b);



مشکل اول اینکه فقط آیدی اول رو تو combobox نشون میده!!

مشکل دوم من نمیدونم کار هرکدو م از اونتهای parse و format چی هست؟
میشه توضیح بدی؟

فرض کن من یه تابع دارم decode که پسورد میگیره و رشته صحیح برمیگردونه. حالا چجوری استفاده کنم؟

ممنون

behzad_gh
جمعه 26 اسفند 1384, 18:01 عصر
در مورد سوال اولت نمی‌دونم درست متوجه منظورت شدم یا نه ولی برای اینکه یک لیست را بایند کنی فکر می‌کنم که اون رو نباید به دیتاست بایند کنی چون باید یکی از ردیف‌های دیتاست انتخاب بشن که این کار با دیتاست عملی نیست . شما باید لیستت رو به یک dataview بایند کنی و در رویداد selectedindexchange لیستت دیتاویو را به مقدار انتخاب شده از لیست فیلتر کنی . اگر از دیتاویو استفاده کردی بقیه کنترل‌های فرمت مانند تکست باکس ها را نیز به همان دیتاویو بایند کن .

در مورد سوال دوم ببین رویداد Format وقتی اتفاق می‌افته که اطلاعات از دیتاسورس در کنترل ( textbox ) قرار می‌گیرند.
شما باید در این رویداد تابع decode رو که رشته رمز شده می‌گیرد و تبدیل به رشته صحیح می‌کند قرار دهی


cevent.value = decode(cevent).tostring

رویداد Parse وقتی اتفاق می‌افته که قرار است مقدار کنترل ( textbox ) گرفته شود و در دیتاسورس ذخیره گردد که باید تبدیل به رمز ( encode ) شود.


cevent.value = encode(cevent)

:چشمک:

once4ever
جمعه 26 اسفند 1384, 21:04 عصر
ایول
یعنی هروقت مقداری تو textbox ریخته میشه مقداری که Format برمیگردونه قرار میگیره
و هربار که مقدار داخل textbox رو صدا میزنیم ( مثلا mytextbox.Text ) مقدار Parse برگردونده میشه. آره؟
میرم چک کنم

behzad_gh
جمعه 26 اسفند 1384, 21:34 عصر
نه اشتباه نکن ما format و parse رو برای دیتابایندیگ تعریف کردیم نه برای textbox .
هر زمانی که اطلاعات از دیتاسورس فرواخونی می‌شود یا داخل دیتاسورس ریخته می‌شود این رویدادها فراخونی میشن و ربطی به گرفتن اطلاعات از textbox.text ندارند.

aligh662000
شنبه 05 اسفند 1385, 14:48 عصر
من یک کمبو دارم که از دیتا بیس اطلاعاتش رو میگیرم و پرش میکنم!
فقط میخوام وقتی برنامه اجرا میشه! عبارت :لطفآ انتخاب کنید: در کمبو ها دیده بشه!
و بعد وقتی روی کمبو کلیک کرد محتویات اون رو ببینه!

سار
شنبه 05 اسفند 1385, 15:11 عصر
دستی پرش کن و اولین Item رو همین چیزی که می خوای بنویس و مابقی رو از جدولت پر کن.