PDA

View Full Version : مشکل ذخیره کردن اطلاعات دیتاگرید ویو در sql



pure_love
دوشنبه 30 اردیبهشت 1398, 23:21 عصر
سلام بچه ها من دارم برنامه حسابداری برای یک فروشگاه مینویسم...
در قسمت صندوق فروشگاه کاربر کالای خودشو سرچ میزنه و انتخاب میکنه ، هر تعداد کالا که انتخاب کنه درون یک دیتاگریدویو ردیف به ردیف( نام کالا ، تعداد ، قیمت فروش) میشینه ،
وقتی کاربر دکمه تسویه میزنه کل اطلاعات دیتاگرید ویو رو ردیف به ردیف درون sql ذخیره میکنه .!

حالا مشکلم اینه :

میخام وقتی تسویه زد و ذخیره کرد بیاد تک تک کالا ها به اندازه تعدادی که درون صندوق (دیتاگریدویو ) وارد کرده و فروخته از انبارش کم شه .

کد ذخیرمو اینجوری نوشتم :


SqlConnection M = new SqlConnection("Data Source=.;Initial Catalog=AdelShope;Integrated Security=True");
M.Open();
int t = dataGridView1.Rows.Count;
for (int i = 0; i <= t - 1; i++)
{


String ss = string.Format("insert into sandogh values(N'{0}','{1}','{2}','{3}','{4}')", dataGridView1.Rows[i].Cells[0].Value, dataGridView1.Rows[i].Cells[1].Value, dataGridView1.Rows[i].Cells[2].Value, dataGridView1.Rows[i].Cells[3].Value, dataGridView1.Rows[i].Cells[4].Value);
SqlCommand comm = new SqlCommand(ss, M);
comm.ExecuteNonQuery();



string conn = (@"Data Source=.;Initial Catalog=AdelShope;Integrated Security=True");
var com = new SqlCommand("SELECT tedad FROM kala WHERE name LIKE N'%" + dataGridView1.Rows[i].Cells[0].Value + "%'", M);
var h = com.ExecuteScalar();
var result = Convert.ToString(Convert.ToInt32(h) - Convert.ToInt32(dataGridView1.Rows[i].Cells[1].Value));
SqlConnection objsqlconn = new SqlConnection(conn);
objsqlconn.Open();


SqlCommand objcmd = new SqlCommand("Update kala set tedad=@tedad where name LIKE N'%" + dataGridView1.Rows[i].Cells[0].Value + "%'", objsqlconn);
objcmd.Parameters.AddWithValue("@tedad", result);
objcmd.ExecuteNonQuery();


}


فرم ذخیره میشه ولی تعداد فقط ردیف اول درست کم میکنه و بقیه ردیف ها هم مثل ردیف اول تغییر میده( تعداد همه کالا ها در انبار یکی میشه و خراب میشه...) !!!

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

تشکر

pure_love
سه شنبه 31 اردیبهشت 1398, 18:35 عصر
کسی نبود جواب بده ؟
کارم گیره بچه ها

saeidfar
سه شنبه 31 اردیبهشت 1398, 22:36 عصر
for (int i = 0; i <= t - 1; i++)

{

DataGridViewRow row = dataGridView1.Rows[i];


value custom = row.Value.ToString();// row.Cells[1].Value;
....

saeidfar
سه شنبه 31 اردیبهشت 1398, 22:38 عصر
شما ابتدا متغیرهات رو از یک سطر دیتا گرید بگیر و سپس پس از محاسبه متغیرها، در دیتابیس ذخیرشون کن

pure_love
چهارشنبه 01 خرداد 1398, 08:08 صبح
for (int i = 0; i <= t - 1; i++)

{

DataGridViewRow row = dataGridView1.Rows[i];


value custom = row.Value.ToString();// row.Cells[1].Value;
....




میشه بیشتر توضیح بدین ؟

pure_love
چهارشنبه 01 خرداد 1398, 08:11 صبح
شما ابتدا متغیرهات رو از یک سطر دیتا گرید بگیر و سپس پس از محاسبه متغیرها، در دیتابیس ذخیرشون کن

بازم نمیشه ، ظاهرا مشکل در همین کد های متغیره و کم کردن تعداد از کالاها...! متغیر تنها هم که میزارم خراب کم میکنه و بجای کم کردن همون تعداد میاد همرو به یه اندازه کم میکنه!

silver189
چهارشنبه 01 خرداد 1398, 09:01 صبح
من از این روش استفاده می کنم شاید به کارتون بیاد :


for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
SqlConnection con = new SqlConnection(DataAccess.DataSource.ConnectionStri ng);
SqlCommand cmd = new SqlCommand("INSERT INTO Persons (SerialID,FirstName,LastName,FullName,BirthCertifi cateNo,NationalCode,BirthDate,BirthLoc,MariageStat us,MilitaryStatus,Description,Institute) "
+ "values (@SerialID,@FirstName,@LastName,@FullName,@BirthCe rtificateNo,@NationalCode,@BirthDate,@BirthLoc,@Ma riageStatus,@MilitaryStatus,@Description,@Institut e)", con);
cmd.Parameters.AddWithValue("@SerialID", dataGridView1.Rows[i].Cells[0].Value);
cmd.Parameters.AddWithValue("@FirstName", dataGridView1.Rows[i].Cells[1].Value);
cmd.Parameters.AddWithValue("@LastName", dataGridView1.Rows[i].Cells[2].Value);
cmd.Parameters.AddWithValue("@FullName", dataGridView1.Rows[i].Cells[3].Value);
cmd.Parameters.AddWithValue("@BirthCertificateNo", dataGridView1.Rows[i].Cells[4].Value);
cmd.Parameters.AddWithValue("@NationalCode", dataGridView1.Rows[i].Cells[5].Value);
cmd.Parameters.AddWithValue("@BirthDate", dataGridView1.Rows[i].Cells[6].Value);
cmd.Parameters.AddWithValue("@BirthLoc", dataGridView1.Rows[i].Cells[7].Value);
cmd.Parameters.AddWithValue("@MariageStatus", dataGridView1.Rows[i].Cells[8].Value);
cmd.Parameters.AddWithValue("@MilitaryStatus", dataGridView1.Rows[i].Cells[9].Value);
cmd.Parameters.AddWithValue("@Description", dataGridView1.Rows[i].Cells[10].Value);
cmd.Parameters.AddWithValue("@Institute", dataGridView1.Rows[i].Cells[10].Value);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show("Added successfully!");

mr.sirwan
چهارشنبه 01 خرداد 1398, 10:37 صبح
یه عکس از فرم و اطلاعاتی که وارد کردین داخلش، اینجا بذارین

pure_love
چهارشنبه 01 خرداد 1398, 20:45 عصر
یه عکس از فرم و اطلاعاتی که وارد کردین داخلش، اینجا بذارین
عکس فرم :
150229

کد مربوطه :

string conn = (@"Data Source=.;Initial Catalog=AdelShope;Integrated Security=True");
var com = new SqlCommand("SELECT tedad FROM kala WHERE ID LIKE N'%" + dataGridView1.Rows[i].Cells[0].Value + "%'", M);
var h = com.ExecuteScalar();
var result = Convert.ToString(Convert.ToInt32(h) - Convert.ToInt32(dataGridView1.Rows[i].Cells[2].Value));
SqlConnection objsqlconn = new SqlConnection(conn);
objsqlconn.Open();
SqlCommand objcmd = new SqlCommand("Update kala set tedad=@tedad where ID LIKE N'%" + dataGridView1.Rows[i].Cells[0].Value + "%'", objsqlconn);
objcmd.Parameters.AddWithValue("@tedad", result);
objcmd.ExecuteNonQuery();



دوست عزیز کد های ذخیرم مشکلی نداره درسته فقط قسمتی که باید تعداد وارد شده رو از تعداد کل کالا در انبار کم کنه خراب کم میکنه ( یعنی وقتی مثلا کالایی 4 تا فروخت از موجودی کل کالا ها 4 تا کم کنه نه فقط همون کالا).
میاد سطر اول درست کم میکنه و کاره بقیه سطر ها نداره ! همه موجودی های انبار مثل همون همون تغییر میده....

pure_love
چهارشنبه 01 خرداد 1398, 20:46 عصر
من از این روش استفاده می کنم شاید به کارتون بیاد :


for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
SqlConnection con = new SqlConnection(DataAccess.DataSource.ConnectionStri ng);
SqlCommand cmd = new SqlCommand("INSERT INTO Persons (SerialID,FirstName,LastName,FullName,BirthCertifi cateNo,NationalCode,BirthDate,BirthLoc,MariageStat us,MilitaryStatus,Description,Institute) "
+ "values (@SerialID,@FirstName,@LastName,@FullName,@BirthCe rtificateNo,@NationalCode,@BirthDate,@BirthLoc,@Ma riageStatus,@MilitaryStatus,@Description,@Institut e)", con);
cmd.Parameters.AddWithValue("@SerialID", dataGridView1.Rows[i].Cells[0].Value);
cmd.Parameters.AddWithValue("@FirstName", dataGridView1.Rows[i].Cells[1].Value);
cmd.Parameters.AddWithValue("@LastName", dataGridView1.Rows[i].Cells[2].Value);
cmd.Parameters.AddWithValue("@FullName", dataGridView1.Rows[i].Cells[3].Value);
cmd.Parameters.AddWithValue("@BirthCertificateNo", dataGridView1.Rows[i].Cells[4].Value);
cmd.Parameters.AddWithValue("@NationalCode", dataGridView1.Rows[i].Cells[5].Value);
cmd.Parameters.AddWithValue("@BirthDate", dataGridView1.Rows[i].Cells[6].Value);
cmd.Parameters.AddWithValue("@BirthLoc", dataGridView1.Rows[i].Cells[7].Value);
cmd.Parameters.AddWithValue("@MariageStatus", dataGridView1.Rows[i].Cells[8].Value);
cmd.Parameters.AddWithValue("@MilitaryStatus", dataGridView1.Rows[i].Cells[9].Value);
cmd.Parameters.AddWithValue("@Description", dataGridView1.Rows[i].Cells[10].Value);
cmd.Parameters.AddWithValue("@Institute", dataGridView1.Rows[i].Cells[10].Value);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show("Added successfully!");



دوست عزیز کد های ذخیرم مشکلی نداره درسته فقط قسمتی که باید تعداد وارد شده رو از تعداد کل کالا در انبار کم کنه خراب کم میکنه ( یعنی وقتی مثلا کالایی 4 تا فروخت از موجودی کل کالا ها 4 تا کم کنه نه فقط همون کالا).
میاد سطر اول درست کم میکنه و کاره بقیه سطر ها نداره ! همه موجودی های انبار مثل همون همون تغییر میده....

pure_love
چهارشنبه 01 خرداد 1398, 20:47 عصر
شما ابتدا متغیرهات رو از یک سطر دیتا گرید بگیر و سپس پس از محاسبه متغیرها، در دیتابیس ذخیرشون کن

دوست عزیز کد های ذخیرم مشکلی نداره درسته فقط قسمتی که باید تعداد وارد شده رو از تعداد کل کالا در انبار کم کنه خراب کم میکنه ( یعنی وقتی مثلا کالایی 4 تا فروخت از موجودی کل کالا ها 4 تا کم کنه نه فقط همون کالا).
میاد سطر اول درست کم میکنه و کاره بقیه سطر ها نداره ! همه موجودی های انبار مثل همون همون تغییر میده....

لطفا اگه میتونید کمکم کنید کارم خیلی گیره
تشکر

mr.sirwan
چهارشنبه 01 خرداد 1398, 21:12 عصر
الان شما مطمئنی این کد درست کار میکنه؟
var result = Convert.ToString(Convert.ToInt32(h) - Convert.ToInt32(dataGridView1.Rows[i].Cells[1].Value));
اصلا توی این خط شما باید خطا داشته باشی، شما داری مقدار سلول یکم رو که همون ستون نام کالا هست رو از مقدار کل کالا کم میکنی

ویرایش:
بعد شما توی این خط:
"SELECT tedad FROM kala WHERE name LIKE N'%" + dataGridView1.Rows[i].Cells[0].Value + "%'"

داری کد کالا رو برای شرط نام کالا استفاده میکنی

و باز هم اینجا:
"Update kala set tedad=@tedad where name LIKE N'%" + dataGridView1.Rows[i].Cells[0].Value + "%'"
با این اوصاف فک کنم خودت متوجه مشکل شدی و نیازی نیست که بگم چطوری اینارو برطرف کنی، اگه بازم متوجه نشدی بگو

pure_love
چهارشنبه 01 خرداد 1398, 21:39 عصر
الان شما مطمئنی این کد درست کار میکنه؟
var result = Convert.ToString(Convert.ToInt32(h) - Convert.ToInt32(dataGridView1.Rows[i].Cells[1].Value));
اصلا توی این خط شما باید خطا داشته باشی، شما داری مقدار سلول یکم رو که همون ستون نام کالا هست رو از مقدار کل کالا کم میکنی

ویرایش:
بعد شما توی این خط:
"SELECT tedad FROM kala WHERE name LIKE N'%" + dataGridView1.Rows[i].Cells[0].Value + "%'"

داری کد کالا رو برای شرط نام کالا استفاده میکنی

و باز هم اینجا:
"Update kala set tedad=@tedad where name LIKE N'%" + dataGridView1.Rows[i].Cells[0].Value + "%'"
با این اوصاف فک کنم خودت متوجه مشکل شدی و نیازی نیست که بگم چطوری اینارو برطرف کنی، اگه بازم متوجه نشدی بگو


ببخشید دوست عزیز کد اشتباه کپی کردم !
کد هام اینه :


string conn = (@"Data Source=.;Initial Catalog=AdelShope;Integrated Security=True");
var com = new SqlCommand("SELECT tedad FROM kala WHERE ID LIKE N'%" + dataGridView1.Rows[i].Cells[0].Value + "%'", M);
var h = com.ExecuteScalar();
var result = Convert.ToString(Convert.ToInt32(h) - Convert.ToInt32(dataGridView1.Rows[i].Cells[2].Value));
SqlConnection objsqlconn = new SqlConnection(conn);
objsqlconn.Open();
SqlCommand objcmd = new SqlCommand("Update kala set tedad=@tedad where ID LIKE N'%" + dataGridView1.Rows[i].Cells[0].Value + "%'", objsqlconn);
objcmd.Parameters.AddWithValue("@tedad", result);
objcmd.ExecuteNonQuery();


کد هام همه جای برنامه که اطلاعات درون تکست باکس هست درست کار میکنه فقط اینکه میخاد اطلاعات از دیتاگرید ویو برداره خراب کار میکنه...!

mr.sirwan
چهارشنبه 01 خرداد 1398, 21:43 عصر
شما فعلا اینارو:
ID LIKE N'%" + dataGridView1.Rows[i].Cells[0].Value + "%'"
تبدیل کن به این:

ID = '" + dataGridView1.Rows[i].Cells[0].Value + "'"
نتیجه رو بگو

pure_love
چهارشنبه 01 خرداد 1398, 22:48 عصر
شما فعلا اینارو:
ID LIKE N'%" + dataGridView1.Rows[i].Cells[0].Value + "%'"
تبدیل کن به این:

ID = '" + dataGridView1.Rows[i].Cells[0].Value + "'"
نتیجه رو بگو

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

150230

کد های ذخیرم :

SqlConnection M = new SqlConnection("Data Source=.;Initial Catalog=AdelShope;Integrated Security=True");
M.Open();
int t = dataGridView1.Rows.Count;
for (int i = 0; i <= t - 1; i++)
{
String ss = string.Format("insert into sandogh values(N'{0}','{1}','{2}','{3}','{4}')", dataGridView1.Rows[i].Cells[1].Value, dataGridView1.Rows[i].Cells[2].Value, dataGridView1.Rows[i].Cells[3].Value, dataGridView1.Rows[i].Cells[4].Value, dataGridView1.Rows[i].Cells[5].Value);
SqlCommand comm = new SqlCommand(ss, M);
comm.ExecuteNonQuery();
}

چیکارش کنم اون ردیف خالی آخری ذخیره نکنه !!؟؟

danialafshari
پنج شنبه 02 خرداد 1398, 01:35 صبح
فکر میکنم خصوصیت AllowUserToAddRows رو False نکردید
اگر اطلاعات رو از طریق خود دیتاگرید اضافه میکنید در حلقه t - 1 رو به t - 2 تغییر بدید