PDA

View Full Version : مشکل در حلقه for برای مدیریت برنامه با پایگاه داده



kh1387
یک شنبه 31 شهریور 1387, 20:21 عصر
سلام دوستان
من می خوام در مدیریت فرمم طوری کار بشه که اگر تکس باکس با فیلد i ستون code برابر بود، اطلاعات رو به کاربر نشون بده و اگر نبود پیغام ناسب رو چاپ کنه.
اما این کد هر دو کار رو باهم انجام می ده.
لطفا منو راهنمایی کنید.
می دونید چرا هر دوکار رو با هم انجام می ده؟
چون مثلا اگر اطلاعات در ردیف 5 باشه خوب این در ردیف اول می گرده و چون پیدا نمی کنه قسمت الس اجرا می شه و وقتی به ردیف 5 می رسه قسمت if!:ناراحت:


for (int i = 0; i < dt.Rows.Count; i++)
{
if (dt.Rows[i]["code"].ToString() == txtCode1.Text)
{
txtName1.Text = dt.Rows[i]["name"].ToString();
txtPelak1.Text = dt.Rows[i]["pelak"].ToString();
txtTel1.Text = dt.Rows[i]["tel"].ToString();
txtAddress1.Text = dt.Rows[i]["address"].ToString();
lblMsg2.Visible = false;
}
else
{
lblMsg2.Visible = true;
txtCode1.Text = "";
break;
}
}

h.jaza
یک شنبه 31 شهریور 1387, 21:25 عصر
کد شما اشتباه هستش.

این کدی رو که من نوشتم، تست کنین. خودم تست کردم، مشکلی نداشت:



private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
if (dataGridView1.Rows[i].Cells["Column2"].Value.ToString() == textBox1.Text)
{
MessageBox.Show("Focus, Now Go Next");
}
else
{
MessageBox.Show("Go Next");
}
}
}

kh1387
دوشنبه 01 مهر 1387, 13:19 عصر
کد شما اشتباه هستش.

این کدی رو که من نوشتم، تست کنین. خودم تست کردم، مشکلی نداشت:



private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
if (dataGridView1.Rows[i].Cells["Column2"].Value.ToString() == textBox1.Text)
{
MessageBox.Show("Focus, Now Go Next");
}
else
{
MessageBox.Show("Go Next");
}
}
}

دوست خوبم ممنونم که جواب منو دادید:
اما من کار با DataTable رو خواسته بودم ولی شما با DataGridView مثال زدید.
اگر ممکنه با DataTable هم مثالی بزنید.
مرسی

majid325
دوشنبه 01 مهر 1387, 16:06 عصر
من كد خودت رو تست نكردم ببينم مشكلش چي هست ولي فكر كنم با كد زير جواب بگيري.

foreach (DataRow drw in dtMaster.Rows)
if (drw["Master_CODE"].ToString() == "5")
MessageBox.Show(drw["Master_CODE"].ToString());
else
MessageBox.Show("Don't Exsit");

در ضمن با عرض پوزش بگم كه فيلد برابر با ستون هست و اون چيزي كه شما ميخواي بگي ركورد هستش.(آخه كلي سر در گم شدم منظور شما چيه)

kh1387
دوشنبه 01 مهر 1387, 22:42 عصر
من كد خودت رو تست نكردم ببينم مشكلش چي هست ولي فكر كنم با كد زير جواب بگيري.

foreach (DataRow drw in dtMaster.Rows)
if (drw["Master_CODE"].ToString() == "5")
MessageBox.Show(drw["Master_CODE"].ToString());
else
MessageBox.Show("Don't Exsit");

در ضمن با عرض پوزش بگم كه فيلد برابر با ستون هست و اون چيزي كه شما ميخواي بگي ركورد هستش.(آخه كلي سر در گم شدم منظور شما چيه)

دوست نازنینم
من کد شما رو هم امتحان کردم و جواب نداد.
دوباره سؤالم رو مطرح می کنم:


foreach (DataRow dr in dt.Rows)
{
if (dr["code"].ToString().Trim() == txtCode1.Text.Trim())
{
txtName1.Text = dr["name"].ToString();
txtPelak1.Text = dr["pelak"].ToString();
txtTel1.Text = dr["tel"].ToString();
txtAddress1.Text = dr["address"].ToString();
}
else
{
MessageBox.Show(".اطلاعاتی با این کد وجود ندارد", "اخطار", MessageBoxButtons.OK, MessageBoxIcon.Warning);
break;
}
}


حالا مشکلم اینه که هم قسمت if اجرا می شه و هم قسمت else !
خیلی عجیبه!!!
کلافه ام کرده خواهش می کنم کمکم کنید.:عصبانی++:

majid325
سه شنبه 02 مهر 1387, 01:03 صبح
خوب دوست من شما داري تو تمام row ها loop ميزني يعني به ازاي هر row شرط شما چك ميشه پس براي اينكه به محض جواب گرفتن loop تما شود زماني كه جواب رو گرفتي از loop بياي بيرون خوب.حالا كد زير رو تست كن اگه هموني كه ميخواي بود يخورده بهينش كن بعد استفاده كن.

Boolean ok = false;
foreach (DataRow drw in dtMaster.Rows)
if (drw["code"].ToString() == txtCode1.Text.Trim())
{
txtName1.Text = dr["name"].ToString();
txtPelak1.Text = dr["pelak"].ToString();
txtTel1.Text = dr["tel"].ToString();
txtAddress1.Text = dr["address"].ToString();

ok = true;
break;
}
if (ok == true)
MessageBox.Show("ok");
else
MessageBox.Show("Not Exist");

ديدم خيلي كلافه شدي ...
اگه كارت راه افتاد دعا كن ما هيچ وقت كلافه نشيم.

kh1387
سه شنبه 02 مهر 1387, 16:52 عصر
خوب دوست من شما داري تو تمام row ها loop ميزني يعني به ازاي هر row شرط شما چك ميشه پس براي اينكه به محض جواب گرفتن loop تما شود زماني كه جواب رو گرفتي از loop بياي بيرون خوب.حالا كد زير رو تست كن اگه هموني كه ميخواي بود يخورده بهينش كن بعد استفاده كن.

Boolean ok = false;
foreach (DataRow drw in dtMaster.Rows)
if (drw["code"].ToString() == txtCode1.Text.Trim())
{
txtName1.Text = dr["name"].ToString();
txtPelak1.Text = dr["pelak"].ToString();
txtTel1.Text = dr["tel"].ToString();
txtAddress1.Text = dr["address"].ToString();

ok = true;
break;
}
if (ok == true)
MessageBox.Show("ok");
else
MessageBox.Show("Not Exist");

ديدم خيلي كلافه شدي ...
اگه كارت راه افتاد دعا كن ما هيچ وقت كلافه نشيم.

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