PDA

View Full Version : چگونگی ارتباط چند ردیف datagridview بین دو فرم



pure_love
چهارشنبه 20 تیر 1397, 15:38 عصر
بچه ها من برنامم از دو بخش انبار و فروش تشکیل شده :

148527

این دوتا باهم ارتباطایی دارن !
اول محصولی در انبار ثبت میکنیم و در بخش فروش ، اون محصول که میخاییم بفروشیم تعدادشون باهم ارتباط دارن و کم و زیاد میشن !
مثلا وقتی من محصولی در بخش فروش میخام ثبت کنم ، جوری کد نوشتم که میره محصولی که اسمش با اسم محصول در انبار برابر هم قرار میده و تعداد اونارو تو انبار منهای تعدادی میکنه که کاربر در بخش فروش ثبت کرده !
منظورم اینه موقع ثبت در بخش فروش : تعداد محصول مورد نظر تو انبار رو منهای تعدادی میکنه که در فروش کاربر وارد کرده و ثبت کردیم !
و وقتی میخاییم همون محصول رو در بخش فروش حذف کنیم: تعداد محصول مورد نظر تو انبار رو با تعدادی که ثبت شده بود و الان حذف شده رو باهم جمع میکنه و به حالت قبل برمیگردونه!
امیدوارم منظورم فهمیده باشید.

با کد زیر اینکارو برای یک محصول انجام میده( فقط یکی) :

کد برای ثبت :

string conn = (@"Data Source=.;Initial Catalog=adel;Integrated Security=True");
M.Open();
var com = new SqlCommand("SELECT tedad FROM anbar WHERE namekala LIKE N'%" + textBox1.Text + "%'", M);
var h = com.ExecuteScalar();
var result = Convert.ToString(Convert.ToInt32(h) - Convert.ToInt32(textBox6.Text));
SqlConnection objsqlconn = new SqlConnection(conn);
objsqlconn.Open();
SqlCommand objcmd = new SqlCommand("Update anbar set tedad=@tedad where namekala LIKE N'%" + textBox1.Text + "%'", objsqlconn);
objcmd.Parameters.AddWithValue("@tedad", result);
objcmd.ExecuteNonQuery();

M.Close();


و همین کد رو اگه بخاییم در بخش حذف استفاده کنیم باید به جای منها ، + بزاریم تعداد محصول به حالت قبل برمیگرده !

حالا مشکلم اینه :
میخام وقتی کاربر از ستون انتخاب ( که تو عکس مشخصه و چک باکس داره ) هر تعداد محصول رو که انتخاب کرد و حذف زد ! تعداد تک تکشون جداگونه تو انبار افزایش بده و به حالت قبل برشون گردونه! چجوری اینکار انجام بدم ؟؟؟

اینم کد حذف کردن رکورد هایی که به وسیله چک باکس انتخاب شده ( گفتم شاید نیاز داشته باشید ) :


SqlConnection con = new SqlConnection(@"Data Source=.;Initial Catalog=adel;Integrated Security=True");

List<string> selectedItem = new List<string>();
DataGridViewRow drow = new DataGridViewRow();
for (int i = 0; i <= dataGridView1.Rows.Count - 1; i++)
{
drow = dataGridView1.Rows[i];
if (Convert.ToBoolean(drow.Cells[6].Value) == true) //checking if checked or not.
{
string id = drow.Cells[0].Value.ToString();
selectedItem.Add(id); //If checked adding it to the list
}
}
con.Open();
foreach (string s in selectedItem) //using foreach loop to delete the records stored in list.
{
SqlCommand cmd = new SqlCommand("Delete from forosh Where ID='" + s + "'", con);
int result = cmd.ExecuteNonQuery();
}

con.Close();
MessageBox.Show("رکورد مورد نظر از حذف گردید", "تاییدیه", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);

Mahmoud.Afrad
شنبه 23 تیر 1397, 03:10 صبح
قبل از حلقه یک تراکنش از روی کانکشن ایجاد کنید.
در حلقه یک دستور آپدیت بزنید و تعداد رو اصلاح کنید. فیلد تعداد و آی دی رو از ردیف دیتاگرید بدست بیارید.
سپس دستور حذف ردیف فاکتور.
بعد از حلقه تراکنش را commit و در صورت بروز خطا rollback کنید.

اگر میتونید فاکتور را حذف نکنید و فقط وضعیتش را به برگشتی تغییر بدید و تعداد را اصلاح کنید.

pure_love
شنبه 23 تیر 1397, 15:21 عصر
قبل از حلقه یک تراکنش از روی کانکشن ایجاد کنید.
در حلقه یک دستور آپدیت بزنید و تعداد رو اصلاح کنید. فیلد تعداد و آی دی رو از ردیف دیتاگرید بدست بیارید.
سپس دستور حذف ردیف فاکتور.
بعد از حلقه تراکنش را commit و در صورت بروز خطا rollback کنید.

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

pure_love
دوشنبه 25 تیر 1397, 17:02 عصر
:افسرده::افسرده::افسرده::افس ده::افسرده: