PDA

View Full Version : مبتدی: اشکال در پر کردن کامبو باکس دوم بر اساس کامبو باکس اولی(قبلی)



vahid.kh
پنج شنبه 28 اردیبهشت 1391, 17:33 عصر
یک groupbox دارم که موقع لود شدن آن یک سری کامبو باکس پر می شوند.حالا می خوام وقتی در کامبو باکس need یک از گزینه ها رو انتخاب میکنم ،کامبو باکس type بر اساس گزینه انتخاب شده در need از یک جدول دیگه که در بانک هستش پر بشه.مثلا اگر در کامبو باکس اول اسن یک استان را انتخاب کردیم.در کامبو باکس دوم اسم شهر های همان استان نشان داده شود.کد هام به صورت زیر هستش.ولی کامبو باکس type خالی میمونه.ولی بقیه پر میشوند.کجای کد اشتباه است.عکس هم گذاشتم در آخر

private void inputToolStripMenuItem1_Click(object sender, EventArgs e)
{
GbrCost.Enabled = true;
DataTable dt = new DataTable();
Cost mycost = new Cost();
dt = mycost.getneed();
CmbNeed.ValueMember = "NeedId";
CmbNeed.DisplayMember = "NeedName";
CmbNeed.DataSource = dt;
از این قسمت مشکل داره تا آخر همین switch
DataTable dttype = new DataTable();
switch (CmbNeed.ValueMember)

{
case" 1":

dttype = mycost.getFood();
CmbTypeNeed.ValueMember = "FoodId";
CmbTypeNeed.DisplayMember = "FoodName";
CmbTypeNeed.DataSource = dttype;
break ;
case" 2":

dttype = mycost.GetCloth();
CmbTypeNeed.ValueMember = "ClothId";
CmbTypeNeed.DisplayMember = "ClothType";
CmbTypeNeed.DataSource = dttype;
break ;
case "3":

dttype = mycost.GetHousing();
CmbTypeNeed.ValueMember = "HousingId";
CmbTypeNeed.DisplayMember = "HousingCost";
CmbTypeNeed.DataSource = dttype;
break ;
case" 4":

dttype = mycost.GetSport();
CmbTypeNeed.ValueMember = "SportId";
CmbTypeNeed.DisplayMember = "SportCost";
CmbTypeNeed.DataSource = dttype;
break ;
case "5":
dttype = mycost.GetEducation();
CmbTypeNeed.ValueMember = "EducationId";
CmbTypeNeed.DisplayMember = "EducationCost";
CmbTypeNeed.DataSource = dttype;
break ;
case" 6":
dttype = mycost.GetRecreate();
CmbTypeNeed.ValueMember = "RecreateId";
CmbTypeNeed.DisplayMember = "RecreateType";
CmbTypeNeed.DataSource = dttype;
break ;
case "7":
dttype = mycost.GetHealth();
CmbTypeNeed.ValueMember = "HealthId";
CmbTypeNeed.DisplayMember = "HealthCost";
CmbTypeNeed.DataSource = dttype;
break ;
case "8":
dttype = mycost.GetManual();
CmbTypeNeed.ValueMember = "ManualId";
CmbTypeNeed.DisplayMember = "ManualCost";
CmbTypeNeed.DataSource = dttype;
break ;
}
dti = DateTime.Now;
Mount mon = new Mount();
DataTable mount = mon.getmount();
CmbMonthcost.DisplayMember = "mountname";
CmbMonthcost.ValueMember = "Mid";
CmbMonthcost.DataSource = mount;
switch (Class1.month_shamsi)
{
case 1:
// m_n = " فروردین ماه "; break;
//Admission adm = new Admission();
// adm.mount = Int32.Parse(CmbMount.SelectedValue.ToString());
CmbMonthcost.SelectedValue = 1; break;


case 2:
// m_n = " اردیبهشت ماه "; break;
CmbMonthcost.SelectedValue = 5; break;

case 3:
// m_n = " خرداد ماه "; break;
CmbMonthcost.SelectedValue = 6; break;
case 4:
// m_n = " تیر ماه "; break;
CmbMonthcost.SelectedValue = 7; break;
case 5:
// m_n = " مرداد ماه "; break;
CmbMonthcost.SelectedValue = 8; break;
case 6:
// m_n = " شهریور ماه "; break;
CmbMonthcost.SelectedValue = 9; break;
case 7:
// m_n = " مهر ماه "; break;
CmbMonthcost.SelectedValue = 10; break;
case 8:
// m_n = " آبان ماه "; break;
CmbMonthcost.SelectedValue = 11; break;
case 9:
// m_n = " آذر ماه "; break;
CmbMonthcost.SelectedValue = 12; break;
case 10:
// m_n = " دی ماه "; break;
CmbMonthcost.SelectedValue = 13; break;
case 11:
// m_n = " بهمن ماه "; break;
CmbMonthcost.SelectedValue = 14; break;
case 12:
// m_n = " اسفند ماه "; break;
CmbMonthcost.SelectedValue = 15; break;
}
TxtDateCost.Text = Convert.ToString(Class1.year_shamsi) + "/" + Convert.ToString(Class1.month_shamsi) + "/" + Convert.ToString(Class1.day_shamsi);
}

Mahmoud.Afrad
پنج شنبه 28 اردیبهشت 1391, 18:15 عصر
شما همون دستور سویچ که مربوط به تنظیم کمبوباکس دوم هست(switch (CmbNeed.ValueMember)) رو باید در رویداد selectedindexchanged کمبوباکس اول بنویسید تا با تغییر آیتم انتخابی از کمبو اول ، دومی مقدار بگیره.

vahid.kh
جمعه 29 اردیبهشت 1391, 12:58 عصر
این کار رو انجام دادم.ولی نمیشه.وقتی برنامه رو Trace میکنم.به switch که میرسه هیچ کدام از case ها اجرا نمیشه.و بلا فاصله به انتهای switch میره.وnull برمیگرده.به هر صورتی هم که از خصوصیات کامبو باکس استفاده میکنم نشد.مثلا دو تا کد زیر.یا اینا selectedvalue,selectedindex,valuemember,displaymem ber


private void CmbNeed_SelectedIndexChanged(object sender, EventArgs e)
{
Cost mycost = new Cost();
DataTable dttype = new DataTable();
switch (CmbNeed.ValueMember)
{
case" 1":

dttype = mycost.getFood();
CmbTypeNeed.ValueMember = "FoodId";
CmbTypeNeed.DisplayMember = "FoodName";
CmbTypeNeed.DataSource = dttype;
break ;




private void CmbNeed_SelectedIndexChanged(object sender, EventArgs e)
{
Cost mycost = new Cost();
DataTable dttype = new DataTable();
switch (Int32.Parse (CmbNeed.ValueMember ))
{
case 1:

dttype = mycost.getFood();
CmbTypeNeed.ValueMember = "FoodId";
CmbTypeNeed.DisplayMember = "FoodName";
CmbTypeNeed.DataSource = dttype;
break;

Mahmoud.Afrad
جمعه 29 اردیبهشت 1391, 13:42 عصر
کمبوها رو چطور پر میکنید؟

vahid.kh
جمعه 29 اردیبهشت 1391, 15:44 عصر
تو کد های بالا نوشتم.از جدولی که تو بانک دارم.مثلا کمبو need :

DataTable dt = new DataTable();
Cost mycost = new Cost();
dt = mycost.getneed();
CmbNeed.ValueMember = "NeedId";
CmbNeed.DisplayMember = "NeedName";
} CmbNeed.DataSource = dt;


class Cost
{
mydbdll.mydb db = new mydbdll.mydb();

public DataTable getneed()
{
DataTable dt = new DataTable();
db.connect();
dt = db.select("select * from TblNeed");
db.disconnect();
return dt;
}

کلاس کانکشن

public class mydb{
public DataTable select(string sql)
{
DataTable dt=new DataTable ();
try {
cmd.CommandText = sql;
da.Fill(dt);
}
catch(Exception ex)
{
if(!showfriendlymessage )
lasterror =ex.Message ;
else
lasterror +="خطا در خواندن اطلاعات .";
}
return dt;
}}

Mahmoud.Afrad
جمعه 29 اردیبهشت 1391, 16:52 عصر
نبایدم وارد سویچ بشه آخه اصلا چرا شما از valuemember استفاده کردید!! می بایست از selectedvalue استفاده کنید.


switch (Convert.ToInt32(comboBox1.SelectedValue))
{
case 1:
MessageBox.Show("one");
break;
case 2:
MessageBox.Show("two");
break;
}

vahid.kh
شنبه 30 اردیبهشت 1391, 18:00 عصر
با این کد فقط اولین گزینه کار میکنه.یعنی وقتی در کامبو باکس اول میخوام گزینه دیگری انتخاب کنم این error رو میده.عکسش رو گذاشتم در پایین.که وقتی گزینه دوم رو انتخاب کردم با این صفحه روبرو میشم.
به جز گزینه اول بقیه همینطوری هستند.این مشکلش کجاست.؟

Cannot bind to the new value member.
Parameter name: value


private void CmbNeed_SelectedIndexChanged(object sender, EventArgs e)
{
Cost mycost = new Cost();
DataTable dttype = new DataTable();
switch (Convert.ToInt32(CmbNeed.SelectedValue))
{
case 1:

dttype = mycost.getFood();
CmbTypeNeed.ValueMember = "FoodId";
CmbTypeNeed.DisplayMember = "FoodType";
CmbTypeNeed.DataSource = dttype;
break;
case 2:

dttype = mycost.GetCloth();
CmbTypeNeed.ValueMember = "ClothId";
CmbTypeNeed.DisplayMember = "ClothType";
CmbTypeNeed.DataSource = dttype;
break;
case 3:

dttype = mycost.GetHousing();
CmbTypeNeed.ValueMember = "HousingId";
CmbTypeNeed.DisplayMember = "HousingCost";
CmbTypeNeed.DataSource = dttype;
break;
case 4:

dttype = mycost.GetSport();
CmbTypeNeed.ValueMember = "SportId";
CmbTypeNeed.DisplayMember = "SportCost";
CmbTypeNeed.DataSource = dttype;
break;
case 5:

dttype = mycost.GetEducation();
CmbTypeNeed.ValueMember = "EducationId";
CmbTypeNeed.DisplayMember = "EducationCost";
CmbTypeNeed.DataSource = dttype;
break;
case 6:

dttype = mycost.GetRecreate();
CmbTypeNeed.ValueMember = "RecreateId";
CmbTypeNeed.DisplayMember = "RecreateType";
CmbTypeNeed.DataSource = dttype;
break;
case 7:

dttype = mycost.GetHealth();
CmbTypeNeed.ValueMember = "HealthId";
CmbTypeNeed.DisplayMember = "HealthCost";
CmbTypeNeed.DataSource = dttype;
break;
case 8:

dttype = mycost.GetManual();
CmbTypeNeed.ValueMember = "ManualId";
CmbTypeNeed.DisplayMember = "ManualCost";
CmbTypeNeed.DataSource = dttype;
break;
}
}
87238

Mahmoud.Afrad
شنبه 30 اردیبهشت 1391, 21:51 عصر
خوب وارد کیس شده. اشکال شما جای دیگری است. بهتره برای این مشکل یک تاپیک دیگر بزنید.