PDA

View Full Version : لود کردن مقادیر با استفاده از دیتا ریدر و یک مشکل کوچک با ان



boysilent
چهارشنبه 17 آبان 1391, 09:08 صبح
سلام دوستان عزیز:
بنده در این برنامه لیست کشویی رو به وسیله این کد پر میکنم
SqlConnection connect = new SqlConnection(@"Data Source=.;Initial Catalog=dbbuy;Integrated Security=True");
SqlDataAdapter da=new SqlDataAdapter("SELECT * FROM sabtsherkat",connect);
DataTable dt = new DataTable();
da.Fill(dt);
txtconame.DataSource = dt;
txtconame.ValueMember = "procod";
txtconame.DisplayMember = "coname";

و مقادیر display , valu مقدار دهی می شوند .
هنگامی که در رویداد SelectedIndexChanged لیست بکشویی یا کمبو باکس این کد هارو مینویسم
SqlConnection connect = new SqlConnection(@"Data Source=.;Initial Catalog=dbbuy;Integrated Security=True");
SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM produc WHERE procod='"+txtconame.SelectedValue+"'", connect);
DataTable dt = new DataTable();
da.Fill(dt);
txtmahsolname.DataSource = dt;
txtmahsolname.ValueMember = "mahcod";
txtmahsolname.DisplayMember = "proname";
mahcods = Convert.ToInt32(txtmahsolname.SelectedValue);
connect.Close();
تا یکی از مقادیر پر شده این لیست کشویی انتخاب شود و دوبارهمقادیر display , valu مقدار دهی می شوند .
سپس توسط این دستورات مقدار داخل دیتابیس رو میخونم ولی متاسفانه فقط مقادیر فیلد اول رو نشون میدهد حتی برای دیگر مقادیر انتخاب شده:
SqlDataReader reader;
SqlConnection connect2 = new SqlConnection(@"Data Source=.;Initial Catalog=dbbuy;Integrated Security=True");
SqlCommand com = new SqlCommand();

com.CommandText = "SELECT * FROM produc WHERE mahcod='"+mahcods+"'";
com.Connection = connect2;
connect2.Open();
reader = com.ExecuteReader();
reader.Read();
if (reader.HasRows)
{
txtbaste.Text = reader["baste"].ToString();
txtjoz.Text = reader["joz"].ToString();
cocodR = Convert.ToInt64( reader["procod"].ToString());
mahcodR = Convert.ToInt64(reader["mahcod"].ToString());
reader.Close();
connect2.Close();

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

morteza271
چهارشنبه 17 آبان 1391, 09:22 صبح
شرمنده زیاد متوجه نشدم مشکلتون کجاس ولی یه چیزی برام خیلی عجیب بود:
شما در رویداد SelectedIndexChanged دوباره کامبوباکس رو پر میکنید؟؟؟

مشکل شما از این قسمته ؟
if (reader.HasRows)
{
txtbaste.Text = reader["baste"].ToString();
txtjoz.Text = reader["joz"].ToString();
cocodR = Convert.ToInt64( reader["procod"].ToString());
mahcodR = Convert.ToInt64(reader["mahcod"].ToString());
reader.Close();
connect2.Close();

یه خورده بیشتر توضیح بدین که دقیقا میخواین چیکار کنین و مشکلتون چیه و کجاست تا بهتون بگم چیکار کنین...

Beginner2013
چهارشنبه 17 آبان 1391, 09:37 صبح
سلام ،دوست من شما باید در رویدا SelectedIndexChanged لیست txtmahsolname به متغیر mahcods مقدار بدید،نه در رویداد تغییر ایدکس txtconame ،به عبارت دیگه جای این کدتون اشتباه هست.

mahcods = Convert.ToInt32(txtmahsolname.SelectedValue);

در واقع شما دارید SelectedValue رو به mahcods می ریزید حال آنکه هنوز چیزی توسط کاربر انتخاب نشده.

boysilent
چهارشنبه 17 آبان 1391, 09:50 صبح
شرمنده زیاد متوجه نشدم مشکلتون کجاس ولی یه چیزی برام خیلی عجیب بود:
شما در رویداد SelectedIndexChanged دوباره کامبوباکس رو پر میکنید؟؟؟

مشکل شما از این قسمته ؟
if (reader.HasRows)
{
txtbaste.Text = reader["baste"].ToString();
txtjoz.Text = reader["joz"].ToString();
cocodR = Convert.ToInt64( reader["procod"].ToString());
mahcodR = Convert.ToInt64(reader["mahcod"].ToString());
reader.Close();
connect2.Close();

یه خورده بیشتر توضیح بدین که دقیقا میخواین چیکار کنین و مشکلتون چیه و کجاست تا بهتون بگم چیکار کنین...

دوست عزیز من در واقع با انتخاب یک ایتم کمبو باکس دیگری رو پر میکنم

boysilent
چهارشنبه 17 آبان 1391, 09:54 صبح
سلام ،دوست من شما باید در رویدا SelectedIndexChanged لیست txtmahsolname به متغیر mahcods مقدار بدید،نه در رویداد تغییر ایدکس txtconame ،به عبارت دیگه جای این کدتون اشتباه هست.

mahcods = Convert.ToInt32(txtmahsolname.SelectedValue);

در واقع شما دارید SelectedValue رو به mahcods می ریزید حال آنکه هنوز چیزی توسط کاربر انتخاب نشده.

من هم در رویداد SelectedIndexChanged مقدار دهی میکنم دیگه؟؟؟

Beginner2013
چهارشنبه 17 آبان 1391, 10:05 صبح
مگه شما دوتا لیست کشویی ندارید؟

morteza271
چهارشنبه 17 آبان 1391, 10:15 صبح
آهان حالا متوجه شدم!
ببینید شما در رویداد SelectedIndexChanged کامبوباکس txtmahsolname کد سومی که گذاشتین رو قرار بدین.
یعنی کد زیر :
SqlDataReader reader;
SqlConnection connect2 = new SqlConnection(@"Data Source=.;Initial Catalog=dbbuy;Integrated Security=True");
SqlCommand com = new SqlCommand();

com.CommandText = "SELECT * FROM produc WHERE mahcod='"+mahcods+"'";
com.Connection = connect2;
connect2.Open();
reader = com.ExecuteReader();
reader.Read();
if (reader.HasRows)
{
txtbaste.Text = reader["baste"].ToString();
txtjoz.Text = reader["joz"].ToString();
cocodR = Convert.ToInt64( reader["procod"].ToString());
mahcodR = Convert.ToInt64(reader["mahcod"].ToString());
reader.Close();
connect2.Close();

boysilent
چهارشنبه 17 آبان 1391, 10:22 صبح
آهان حالا متوجه شدم!
ببینید شما در رویداد SelectedIndexChanged کامبوباکس txtmahsolname کد سومی که گذاشتین رو قرار بدین.
یعنی کد زیر :
SqlDataReader reader;
SqlConnection connect2 = new SqlConnection(@"Data Source=.;Initial Catalog=dbbuy;Integrated Security=True");
SqlCommand com = new SqlCommand();

com.CommandText = "SELECT * FROM produc WHERE mahcod='"+mahcods+"'";
com.Connection = connect2;
connect2.Open();
reader = com.ExecuteReader();
reader.Read();
if (reader.HasRows)
{
txtbaste.Text = reader["baste"].ToString();
txtjoz.Text = reader["joz"].ToString();
cocodR = Convert.ToInt64( reader["procod"].ToString());
mahcodR = Convert.ToInt64(reader["mahcod"].ToString());
reader.Close();
connect2.Close();

دوست عزیزر من هم همین کارو کردم کلا جواب میده //ولی این کد زیر رو که اجرا میکنه در واقع فقط برای اولین ایتم مقادیر رو لود میکنه دیتا ریدر
cocodR = Convert.ToInt64( reader["procod"].ToString());
mahcodR = Convert.ToInt64(reader["mahcod"].ToString());

یعنی اگه مثلا کیک انتخاب بشود باز هم بسته بندی کارتن انتخاب میشود و تعداد هم 30؟

morteza271
چهارشنبه 17 آبان 1391, 11:08 صبح
خوب پس شما باید این خط
mahcods = Convert.ToInt32(txtmahsolname.SelectedValue); از کدتون رو در رویداد SelectedIndexChanged کامبوباکس txtmahsolname بذارین.
ولی شما الان در رویداد SelectedIndexChanged کامبوباکس txtconame گذاشتین!!!
متوجه شدین؟؟

boysilent
چهارشنبه 17 آبان 1391, 11:37 صبح
اره حل شد اصلا حواسم نبود:دی //
یه سوال برام پیش اومده که اگه بخواهیم مقدار یه masked textbox رو چک کنیم که خالی نباشه؟؟
باید چه کدی رو بنویسیم:
من این کد رو نوشتم ولی نادیده میگیره؟؟
if(mskdate.text !="")

Nima_kyan
چهارشنبه 17 آبان 1391, 11:53 صبح
سلام
راه حل های مختلفی داره مثلا من واسه تاریخ از این کد استفاده میکنم(که ماسکش به این شکله __/__/____ ).

if (txtDate.Text.Contains("_") == true)
errorProvider1.SetError(txtDate, "تاريخ نامعتبر می باشد");

Beginner2013
چهارشنبه 17 آبان 1391, 12:29 عصر
اره حل شد اصلا حواسم نبود:دی //

آره دوست من به نظر میاد یخورده خسته اید والا تو پست سوم کار تمام بود :)



سلام
راه حل های مختلفی داره مثلا من واسه تاریخ از این کد استفاده میکنم(که ماسکش به این شکله __/__/____ ).

if (txtDate.Text.Contains("_") == true)
errorProvider1.SetError(txtDate, "تاريخ نامعتبر می باشد");

دوست من txtDate.Text.Contains("_") خودش یه مقدار بولین هست،دیگه ==true برای چی؟.

Nima_kyan
چهارشنبه 17 آبان 1391, 12:40 عصر
دوست من txtDate.Text.Contains("_") خودش یه مقدار بولین هست،دیگه ==true برای چی؟.
دوست عزیز حق با شماست عجله ای نوشتم توجه نکردم

boysilent
چهارشنبه 17 آبان 1391, 14:14 عصر
بالاخره چی شد؟؟؟؟
یه دستور دیگه نمیشه نوشت این زیادی گیر میده //

Mahmoud.Afrad
چهارشنبه 17 آبان 1391, 15:36 عصر
کامل شدن ماسک رو میشه بررسی کرد که آیا کاربر به طور کامل پر کرده یا نه:
if (!maskedTextBox1.MaskCompleted)
{
MessageBox.Show("Field is not complete!");
}