PDA

View Full Version : سوال: مشکل در رویداد چنج کومبو باکس بعد از خواندن از دیتا بیس



azaditafakor
دوشنبه 01 شهریور 1389, 01:43 صبح
با عرض سلام و خسته نباشید

طبق عکس پیوست من یه فرم دارم که توش کد تولید میدم و اونو توی دیتا بیس سرچ میکنم و تمام مقادیر خونده شده از اون رو توی فیلد های مشخص میارم و در صورت نیاز ویرایش میکنم .

حالا وقتی فیلد ماه رو میخونم و اونو توی کمبو باکس ماه قرار میدم ، متن داخل کمبو عوض میشه و ماه رو بصورت صحیح نشون میده

ولی مشکل اینجاست که با تغییر کمبو باکس باید گرید ویوویی که زیرش وجود داره هم بر طبق اون تغییر کنه ، که نمیکنه !

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

کد ها :

کد ست کردن کومبو باکس :


CmbMonth.SelectedIndex = Int32.Parse(dr["Month"].ToString()) - 1;

کد برای بازخوانی رویداد چنج کومبو :


CmbMonth_SelectedIndexChanged(sender, e)

کد خود رویداد چنج :


Cls.BindDGV(DGV, "SELECT ....... . . .. ");

.

azaditafakor
دوشنبه 01 شهریور 1389, 17:46 عصر
کجاش معلوم نیست بگید من توضیح میدم . یکی راهنمایی کنه دیگه .
--------------------
یه مثال میزنم شبیه به این مشکل :

دو یا سه تا کومبو باکس یا هر چیز دیگه رو در نظر بگیرد که به هم مرتبط هستند یعنی با تغییر اولی ، دومی تغییر میکنه و با تغییر دومی ، سومی هم تغییر میکنه و الی آخر ...

حالا ما اینا رو نوشتیم و دارن به صورت صحیح کار میکنن. (وقتی با موس باهاشون کار کنید درستن.)

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

azaditafakor
دوشنبه 01 شهریور 1389, 18:05 عصر
عجیبه یا عجیب نیست ؟

حجتی نیا
دوشنبه 01 شهریور 1389, 18:41 عصر
عجیبه یا عجیب نیست ؟
اگه تو رویداد textchange بنویسی باید حل بشه
یه برنامه نوشتم که با یه دکمه،یه عددی داخل کمبو بره و تو رویداد textchange نوشتم اگه فلان عدد شد،فلان کارو بکن که انجام داد ..

azaditafakor
سه شنبه 02 شهریور 1389, 09:22 صبح
اگه تو رویداد textchange بنویسی باید حل بشه
یه برنامه نوشتم که با یه دکمه،یه عددی داخل کمبو بره و تو رویداد textchange نوشتم اگه فلان عدد شد،فلان کارو بکن که انجام داد ..

ممنون از اینکه وقت گذاشتید .

منم همینکارو کردم ، به صورت دستی درسته ولی باز با کد جواب نمیده .
مشخصا یه جا دارم اشتباه میکنم . چون مقادیر داخل اون کمبو باکس ها رو هم دارم توسط یه کلاس بایند میکنم ، حتما این وسط اروری وجود داره . البته اینقدر استپ به استپ کد رو چک کردم که خسته شدم .
بازم ممنون.

حجتی نیا
سه شنبه 02 شهریور 1389, 10:37 صبح
ممنون از اینکه وقت گذاشتید .

منم همینکارو کردم ، به صورت دستی درسته ولی باز با کد جواب نمیده .
مشخصا یه جا دارم اشتباه میکنم . چون مقادیر داخل اون کمبو باکس ها رو هم دارم توسط یه کلاس بایند میکنم ، حتما این وسط اروری وجود داره . البته اینقدر استپ به استپ کد رو چک کردم که خسته شدم .
بازم ممنون.
این برنامه رو ببین ... هردو کمبو بایند شدند

mahboube
سه شنبه 02 شهریور 1389, 10:48 صبح
كافي focus رو بزاري رو comboboxت.
مثلا

comboBox1.Items.Add(textBox1.Text);
comboBox1.SelectedIndex = 0;

اونوقت رويداد comboBox1_SelectedIndexChanged كار ميكنه.كداتو توش بنويس

azaditafakor
چهارشنبه 03 شهریور 1389, 23:51 عصر
با تشکر از دوستانی که وقت صرف میکنند تا مشکلات رو برطرف کنند .
من یه قسمتی از ارورم رو پیدا کردم . کدشو به همراه ارورم قرار میدم .
این کدیه که من با اون عملیات جستجو رو توی بانک انجام میدم و مقادیر پیدا شده رو درون جاهاشون برای ویرایش قرار میدم .


private void TxtCode_TextChanged(object sender, EventArgs e)
{
SqlCommand cmd = new SqlCommand("Select * from TblProduction where Code = ' " + TxtCode.Text + "'", FrmMain.str);
if (FrmMain.str.State != ConnectionState.Open)
FrmMain.str.Open();
SqlDataReader dr = cmd.ExecuteReader();
try
{
dr.Read();
if (dr.HasRows)
{
TxtDate.Text = dr["Date"].ToString();
CmbSalon.SelectedValue = dr["Salon"].ToString();
CmbMachine.SelectedValue = dr["Machine"].ToString();
CmbOperator.SelectedValue = dr["Operator"].ToString();
NFrom.Value = decimal.Parse(dr["TimeFrom"].ToString());
NTo.Value = decimal.Parse(dr["TimeTo"].ToString());
TxtNo.Text = dr["No"].ToString();
TxtNoZ.Text = dr["NoZ"].ToString();
TxtTanzim.Text = dr["Tanzim"].ToString();
TxtTamir.Text = dr["Tamir"].ToString();
CmbMonth.SelectedIndex = Int32.Parse(dr["Month"].ToString()) - 1;
BtnEnter.Text = "ویرایش";
BtnDel.Enabled = true;
}
else
{
dr.Close();
CleanForm();
BtnEnter.Text = "ثبت";
}

}
catch (Exception err)
{
MessageBox.Show("TxtCode_TextChanged : " + err.Message);
}
dr.Close();
if (FrmMain.str.State != ConnectionState.Closed)
FrmMain.str.Close();
}

مشکل از خط 13 شروع میشه همونجا که نوشته


CmbSalon.SelectedValue = dr["Salon"].ToString();

تا این مقدار ست میشه چون توی همین کومبو باکس خاصیت تکست چنج فعاله ، فورا اونو اجرا میکنه و این ارور دریافت میشه :


There is already an open DataReader associated with this Command which must be closed first .

اینطور که به نظر میاد قبل از بستن دیتا ریدر نباید کار دیگه انجام داد .
ولی چطور میشه آخه اگر اونجا دیتا ریدر رو ببندم که بقیه ی کد کار نمی کنه اگرم نبندم که اینجوریه !
در واقع چطور میشه این جستجو توی بانک رو به گونه ای انجام داد که تا آخر کد ها بیش بره و بعدا به رویداد های مختلف رسیدگی کنه ، یعنی تا خط 13 ست شد ، نره به رویداد اون و تا آخر این قسمت از کد ها رو بخونه و دیتا ریدر رو ببنده و بعد رویداد ها ی دیگه رو بررسی کنه .
ممنون .

azaditafakor
پنج شنبه 04 شهریور 1389, 03:40 صبح
آقا یکی بگه این دیتا ریدر رو کی و کجا ببندم ؟ البته طبق توضیحات قبلی .

حجتی نیا
پنج شنبه 04 شهریور 1389, 10:22 صبح
آقا یکی بگه این دیتا ریدر رو کی و کجا ببندم ؟ البته طبق توضیحات قبلی .
شما میتونی اون اطلاعات رو در متغییری بریزی و بعد بستن ریدر، اونا رو در کمبو قرار بدی ..