PDA

View Full Version : سوال: تغییردادن Item یک Combobox ازیک فرم دیگه



Galawij
سه شنبه 15 مرداد 1387, 18:12 عصر
سلام
یک فرم برای جستجوی کالادارم که کاربرکالای انتخابی خودرادرآن فرم جستجومی کند.
حالاوقتی کالاراانتخاب کرد،بایدcombobox این فرمم (فرم جاری )متناسب باکالای انتخابی Itemاش عوض بشه .این combobox ام به dt ای که نام همه کالاهارابرمی گردونه متصله .
مشکل من اینه که درفرم جستجوبعدازپایان کارچه جوری آیتم combobox اولم روتغییربدم به کالای که کاربرانتخاب کرده .
ازاین کداستفاده کردم جواب نمی ده :

moarefikala aform = new moarefikala();
for (int i = 0; i < aform.comboBox3.Items.Count; i++)
{
if (aform.comboBox3.Items[i] == this.dataGridView1.CurrentRow.Cells[1].Value)
aform.comboBox3.SelectedItem = aform.comboBox3.Items[i].ToString();
}
ممنون می شم راهنمایی کنید:لبخندساده:

رضا جاسبی
سه شنبه 15 مرداد 1387, 21:58 عصر
شما یک فرم به نام aform داری که جستجو رو انجام میده. در جایی که انتخاب کالا رو انجام دادی احتمالا با یک Button تایید می کنی. حالا فرم رو که ببندی به فرم اول برمی گردی. برای استفاده از مقداری که در فرم دوم aform داری باید یک متغیر یا Property و یا متد Public داشته باشی. حتی می تونی ComboBox مورد نظرت رو Public کنی که شدیدا Not Recommended است.
البته اگر شما جستجو داری و یک کالا انتخاب می کنی چرا بجای ComboBox از TextBox استفاده نمی کنی؟ یک کم مساله ات برام مبهمه

nilmil_nil
چهارشنبه 16 مرداد 1387, 01:27 صبح
شما ان تیکه کدی که در خط 4 نوشتی اشتباه است و با این کد جایگزین کن


aform.combobox3.selectedindex=i

tthenry14plus
چهارشنبه 16 مرداد 1387, 03:51 صبح
خیلی خیلی آسون انجامش بده:

اینطور که متوجه شدم هر دو کامبو باکس شما با یک لیست از کالاها پر شده اند (یکی کمتر یکی بیشتر) ،
برای مثال فرض می کنیم کاربر از کامبوی اولی "روان نویس" رو انتخاب میکنه حالا اونطور که شما گفتید باید باید در کامبوی دومی هم همون "روان نویس" انتخاب بشه، درسته؟؟
بدین صورت عمل کنید:


comboBox2.SelectedIndex = comboBox2.FindString(comboBox1.Text);

اگر رشته مورد نظر جزو لیست کامبو باکس دوم باشه FindString مکان اون رو برمیگردونه و اگر رشته مورد نظر در کامبو پیدا نشه 1-

tthenry14plus
چهارشنبه 16 مرداد 1387, 03:56 صبح
اون تیکه کدی هم nilmil_nil عزیز گفتن ساختارش اشتباهه فقط یه ایراد داره و اون هم ()ToString آخرشه که نباید باشه :


aform.comboBox3.SelectedItem = aform.comboBox3.Items[i];

Galawij
چهارشنبه 16 مرداد 1387, 10:54 صبح
شما یک فرم به نام aform داری که جستجو رو انجام میده. در جایی که انتخاب کالا رو انجام دادی احتمالا با یک Button تایید می کنی. حالا فرم رو که ببندی به فرم اول برمی گردی. برای استفاده از مقداری که در فرم دوم aform داری باید یک متغیر یا Property و یا متد Public داشته باشی. حتی می تونی ComboBox مورد نظرت رو Public کنی که شدیدا Not Recommended است.
البته اگر شما جستجو داری و یک کالا انتخاب می کنی چرا بجای ComboBox از TextBox استفاده نمی کنی؟ یک کم مساله ات برام مبهمه
من خودم همه اين راههاراامتحان كردم گفتم كه جواب نميده به نظرخودم كه مساله روواضح توضيح دادم .نمي خوام ازمتغييرهاي Public استفاده كنم .من مقداررادارم مي خوام كامبوي فرم اولم درست select بشه توهمين فرم بعداززدن دكمه تائيد.

tthenry14plus
چهارشنبه 16 مرداد 1387, 16:05 عصر
اگر میتونید فایل مورد نظرتون رو ضمیمه کنید ...

tthenry14plus
چهارشنبه 16 مرداد 1387, 16:48 عصر
فکر نمیکنم اگر بجای اون حلقه از این کد استفاده کنید دیگه مشکلی داشته باشید...


aform.comboBox3.SelectedItem = aform.comboBox3.FindString(dataGridView1.CurrentRo w.Cells[1].Value.ToString());

Galawij
پنج شنبه 17 مرداد 1387, 17:46 عصر
ازتوجه تون ممنونم آقای tthenry14plus حجم برنامه زیاده .درحقیقت پروژه پایانم هست.
جالبه که بگم اون حلقه اصلاً کارنمی کنه یعنی مقداربرگشتی دستور

this.textBox1.Text = aform.comboBox3.Items.Count.ToString();راباا ن textboxکه نشون بدیم محتوی صفرهست.
مشکل حلقه روهمان طورکه شماگفتیدحل کردم .یعنی اصلاً حلقه نمیخواد.چون دقیقاً DGV فرم جستجوم باهمان dt که کامبوباکس رو پرکردم پرمی شه.....پس DGV,rowindex ام همان item کمبوباکس هست .
این باراین دستورراکه خیلی شبیه دستورشماست امتحان کردم بازم جواب نمیده

aform.comboBox3.SelectedItem = this.dataGridView1.CurrentRow.Index;
من برای روشن ترشدن مسئله دوتافرممواینجامی ذارم خودتون ببینید.
لازم بگم که :درحین تغییردادن item کمبوباکس فرم معرفی کالا این فرم بازه وبازدن دکمه تائیدفرم جستجو این عمل بایدصورت بگیره وبعدفرم جستجو بسته بشه.
امیدوارم این تاپیک باکمک شماوبقیه دوستان به نتیجه مطلوب برسه.

tthenry14plus
جمعه 18 مرداد 1387, 02:53 صبح
اولاً که اصلا این کد شما:


aform.comboBox3.SelectedItem = this.dataGridView1.CurrentRow.Index;
اشتباهه چون aform.comboBox3.SelectedItem حتما باید برابر با یک آبجکت قرار داده بشه ولی شما اینکارو انجام نمیدید و یک عدد اینتیجر به اون نسبت میدید، بدین صورت باید اصلاح بشه:


aform.comboBox3.SelectedItem=aform.comboBox3.Items[i];

دوماً شما از کجای میدونید من خانمم یا آقا !!؟؟ :متفکر:
سوماً شوخی کردم ، چهارماً میدونید مشکل کار شما کجاست ؟؟
مشکل شما اینه که به فرم کالاهاتون نمیتونید پارامتر ارسال کنید، در هنگام فراخوانی فرم کالاها باید پارامتری به Constractor فرم کالاهاتون ارسال کنید که اینکارو انجام نمیدید،
البته هنگام فراخوانی فرم جستجو هم یه باید به اون فرم پارامتری رو ارسال کنید که اگر به کدهای پایین نگاه کنید متوجه میشید:

هنگام باز کردن فرم جستجو از فرم کالاها:


SearchForm sForm=new SearchForm();
sForm.tag=this;
sForm.Show();


حالا برای اعمال تغییرات از فرم جستجو در فرم کالاها :


moarefikala aform = This.Tag as moarefikala;
aform.comboBox3.SelectedItem=aform.comboBox3.Items[i];

پنجماً موفق باشید ، امیدوارم مشکلتون حل شده باشه ...

رضا جاسبی
شنبه 19 مرداد 1387, 00:24 صبح
من خودم همه اين راههاراامتحان كردم گفتم كه جواب نميده به نظرخودم كه مساله روواضح توضيح دادم .نمي خوام ازمتغييرهاي Public استفاده كنم .من مقداررادارم مي خوام كامبوي فرم اولم درست select بشه توهمين فرم بعداززدن دكمه تائيد.
دوست من شما در فرم اول (به هر نوعی) به مقدار انتخاب شده در فرم دوم دسترسی داری یا نه؟ من تصورم این بود که نداری و سوالت در مورد نحوه دسترسی به مقدار مورد نظر هست. من به ذهنم داشتن یک چیز Public میرسه. حالا متغیر ، Property، متد ، Constructor و Distructore و مانند آن.
اما اگر به هر شکل دسترسی داری و سوالت در مورد انتخاب گزینه مورد نظر از ComboBox است با SelectedItem و یا FindString ( یا بهتر از اون FindStringExact ) به همراه SelectedIndex مشکل رو حل می کنه.

Galawij
یک شنبه 20 مرداد 1387, 18:09 عصر
مشکل شما اینه که به فرم کالاهاتون نمیتونید پارامتر ارسال کنید، در هنگام فراخوانی فرم کالاها باید پارامتری به Constractor فرم کالاهاتون ارسال کنید که اینکارو انجام نمیدید،
البته هنگام فراخوانی فرم جستجو هم یه باید به اون فرم پارامتری رو ارسال کنید که اگر به کدهای پایین نگاه کنید متوجه میشید:

هنگام باز کردن فرم جستجو از فرم کالاها:


SearchForm sForm=new SearchForm();
sForm.tag=this;
sForm.Show();


حالا برای اعمال تغییرات از فرم جستجو در فرم کالاها :


moarefikala aform = This.Tag as moarefikala;
aform.comboBox3.SelectedItem=aform.comboBox3.Items[i];


واقعاً ازتون ممنونم ، به جواب رسیدم .
این روش ارسال پارامتررافقط برای فرم جستجوی کالام پیاده کردم وجواب داد.

بازم ممنونم که بافکروحوصله جواب می دید.جناب ttenry14plus :تشویق:

tthenry14plus
یک شنبه 20 مرداد 1387, 19:44 عصر
خواهش میکنم ، وظیفه هممون اینه که به همدیگه کمک کنیم.

موفق باشید ...

sariya
یک شنبه 20 مرداد 1387, 21:37 عصر
سلام
یه سوال دارم اینکه:
اگه بخوام یک combobox با database ارتباط برقرار کنه چیکار کنم؟
یعنی از database بخوام اضافه مثلا گروه اضافه کنم؟
ممنون میشم راهنماییم کنید
یه تازه کارر...........

tthenry14plus
دوشنبه 21 مرداد 1387, 00:55 صبح
مثال:
ارتباط DataBase با دیتاگرید ، کامبوباکس و لیست باکس


OleDbConnection con = newOleDbConnection("provider=microsoft.jet.oledb.4.0;data source=" + Environment.CurrentDirectory + "\\db1.mdb");
DataSet ds = newDataSet();
OleDbDataAdapter da = newOleDbDataAdapter("select * from table1", con);
da.Fill(ds, "t1");
dataGridView1.DataSource = ds.Tables[0];
comboBox1.DataSource = listBox1.DataSource = ds;
comboBox1.DisplayMember = listBox1.DisplayMember = "t1.city";