PDA

View Full Version : اضافه کردن به تعداد یک کالا



mohammad2407
جمعه 22 شهریور 1392, 01:29 صبح
سلام دوستان عزیز من یک برنامه انبار داری دارم مینویسم وقتی که من فاکتور خرید ثبت میکنم و اقلام اون فاکتور وارد دیتا گرید میکنم. میخوام تعداد اون کالا ها در انبار افزایش پیدا کنه

مثلا من در انبار

4 تا موس دارم
5 تا کیبور

حالا میخوام یک فاکتور خرید جدید ثبت کنم

50 تا موس خریدم
90 تا کیبورد

میخوام بعد از ثبت فاکتور تعداد کالا ها افزایش پیدا کنه به شکل زیر

موس بشه 54 تا

کیبورد بشه 95 تا

ممنون میشم راهنمایی کنید

دوستان من با کد زیر هیدر فاکتور + اقلام فاکتور که در دیتا گرید هستن ثبت میکنم

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


foreach (DataGridViewRow row in dataGridView1.Rows)
foreach (DataGridViewCell cell in row.Cells)
if (Convert.ToString(cell.Value) == namberfanif.Text)
{
PMessageBox.Show("تکراری");
}
else
{
// پیغام خطا
// ثبت رکورد بعدی


try
{
db.Connection.Open();
db.Transaction = db.Connection.BeginTransaction();

// ثبت هدر فاکتور
H_factoor tb = new H_factoor();
var H_factoor_query = db.H_factoors;
tb.date = txtdate.Text;
tb.numberpfactoor = txtnumberpfactoor.Text;
tb.numberfactor = txtnumberfactoor.Text;
tb.manba = commanba.Text;
db.H_factoors.InsertOnSubmit(tb);
//ثبت تعداد کالا در انبار
if (!string.IsNullOrWhiteSpace(textBox4.Text))
{
Int64 ID = Int64.Parse(textBox4.Text);
/*Dar n => n.Number == ID nabayad Number ro bezarid,Code kala ro bezarid.*/
var item = db.anbars.SingleOrDefault(n => n.Number ==ID);
if (item != null)
{
item.Number += Int64.Parse(textBox4.Text);
db.anbars.InsertOnSubmit(tb2);
}

}
////////END
// ثبت اقلام فاکتور
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{

// به ازای هر سطر یک شئ از کلاس مدل اقلام ساخته
// و مقداردهی میکنید
factoor tb_f = new factoor();
tb_f.codetype = Convert.ToString(dataGridView1.Rows[i].Cells[0].Value);
tb_f.namberfani = Convert.ToString(dataGridView1.Rows[i].Cells[1].Value);
tb_f.Number = Convert.ToInt64(dataGridView1.Rows[i].Cells[3].Value);
tb_f.Pricekharid = Convert.ToDecimal(dataGridView1.Rows[i].Cells[4].Value);
tb_f.Pricefroosh = Convert.ToDecimal(dataGridView1.Rows[i].Cells[5].Value);
tb_f.numberfactor = Convert.ToString(dataGridView1.Rows[i].Cells[7].Value);

db.factoors.InsertOnSubmit(tb_f);
}
db.SubmitChanges();
db.Transaction.Commit();
PMessageBox.Show("فاکتور خرید با موفقیت ثبت شد", "پیام سیستم");
}
catch (Exception ex)
{
db.Transaction.Rollback();
MessageBox.Show(ex.Message, "اشکال در ثبت فاکتور");
}
finally
{
db.Transaction.Dispose();
db.Connection.Close();
}
}

m_ali_gho
جمعه 22 شهریور 1392, 01:52 صبح
سلام
شاید من اشتباه متوجه شدم اما اینی که میگین نباید چیز سختی باشه. شما مشکلتون دقیقا کجاست؟ دنبال این هستین که با یک کوئری کارتون رو انجام بدین یا کلا با اصل قضیه مشکل دارین؟ میشه با یه select میزان موجودی انبار رو بدست آورد و با تعدادی که تو فاکتور بهش اشاره شده جمعش کرد و بعدشم جدول رو با مقدار جدید آپریت کرد. مشکل همین بود یا ...؟؟؟

mohammad2407
جمعه 22 شهریور 1392, 02:01 صبح
دنبال این هستین که با یک کوئری کارتون رو انجام بدین
دقیقا

میشه با یه select میزان موجودی انبار رو بدست آورد و با تعدادی که تو فاکتور بهش اشاره شده جمعش کرد و بعدشم جدول رو با مقدار جدید آپریت کرد. مشکل همین بود یا ...؟؟؟

آره افرین درسته

ولی نمیدونم چطوری باید این مقدار از دیتا گرید بگیرم و بعد با موجودی داخل انبار جمع کنم .

چطوری باید دقیقا اون کالا رو داخل انبار selectکنم .
و از این حرف ها

کلا من داخل کوئری این قسمت موندم

فقط اگر میشه به صورت لینک آموزش بدید :خجالت: حوصله ADO ندارم :اشتباه:

m_ali_gho
جمعه 22 شهریور 1392, 22:49 عصر
کدوم کوئری رو مشکل داری؟select یا Update?

alonmahdi
جمعه 22 شهریور 1392, 23:29 عصر
سلام
والا منم مثل مابقی دوستان در این سوال شک کردم چون که ظاهرش خیلی آسونه حالا منظور شما چیه رو درست نفهمیدم . لذا یک راهنمایی می کنم شاید به دردتون خورد:

txtcode.Text = dataGridView1.SelectedRows[0].Cells[0].Value.ToString();

با این کار می تونی از داخل گرید ویو بر اساس مقداری که در cells وارد می کنی از سمت چپ به راست به مقادیری که در گریدویو نشون می ده دست پیدا کنی .
که در این مثال شما می تونی یک کاری به کنی مثلا اگه کد موس رو اولین سلول و مقدار رو دومین سلول گریدویو باشه شما می تونی با کد بالا به کد کالا و با این کد :

txtqty.Text = dataGridView1.SelectedRows[0].Cells[1].Value.ToString();

به تعدادش برسی خب حالا دیگه کافیه که تعداد رو با تعداد مورد نظر جمع کنی وبعد هم با یک کوئری آپ دیت بر اساس کدی که از گریدویو بدست آوردی اون تغییرات رو اعمال کنی.
امید وارم به دردت بخوره .

R_khaleghi
جمعه 22 شهریور 1392, 23:37 عصر
سلام.

می تونی یک کوئری Select بزاری که مثلا وقتی دکمه ثبت را زد ابتدا چک کند که کالا داخل انبار هست یا خیر اگر بود با استفاده از دستور UPDATE مقدار اون را ویرایش کنید و اگر نبود INSERT کنید.

موفق باشید.

mohammad2407
شنبه 23 شهریور 1392, 00:03 صبح
می تونی یک کوئری Select بزاری که مثلا وقتی دکمه ثبت را زد ابتدا چک کند که کالا داخل انبار هست یا خیر اگر بود با استفاده از دستور UPDATE مقدار اون را ویرایش کنید و اگر نبود INSERT کنید.

جواب این تاپیک فقط Mahmoud.Afrad داره که متاسفانه نیستش .

تمام کالا هایی که وارد دیتا گرید میشن از قبل در انبار هستن یه جور هایی بهتره بگم ما کالا رو از انبار میاریم داخل دیتا گرید اگر نباشه باید کالا ایجاد بشه که اصلا ربطی نداره به موضوع الان

مثلا تا الان حدود 10 قلم کالا وارد دیتا گرید شدن

حالا میخوایم این 10 قلم به موجودی انبار ما اضافه بشه

سوال های من

من یک کلید اصلی در دیتا گرید دارم برای هر کالا به نام شماره کالا

1- چطوری این شماره کالا را در انبار جستجو کنم و بعد به موجودی اون کالا اضافه کنم

والا سخت نیست :لبخند:

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

R_khaleghi
شنبه 23 شهریور 1392, 00:34 صبح
سلام.
این دستور Select با استفاده از لینک هست:

LinqDataContext DB=new LinqDataContext();

var Query = from t in db.anbar
where t.code_kala == Convert.toint32(txt_KalaCode)
select t;

datagridview1.datasource = query;


دستور بالا را میتونی بزاری داخل textchanged تکس باکس کد کالا بعد با استفاده از دستور if چک می کنی که اگر دیتاخالی نبود UPDATE کن.


if (datagridview1.rowscount!=0)
{
// یک استور پروسیجر درست میکنی که دستور آپدیت را داخل پیاده کردی
Db.UpdateAnbar( ....);
}


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

موفق باشید.

m_ali_gho
شنبه 23 شهریور 1392, 01:54 صبح
سلام
سوالتون خیلی گنگ هست و توضیحاتتون هم خیلی کم.
یه جدول فرضی میگم برا این موضوع به اسم stock که 3 تا ستون داره:
1-id از نوع int که کد اصلی جدول هم هست
2-name رشته که نام جنس رو داره
3-balance از نوع int که تعداد موجودی جنس رو داره
این مهمه که شما چطور میخواین یه فاکتور رو ثبت کنید. اما هر مدلی که این کار رو انجام میدین باید به کد جنس ثبت شده دسترسی داشته باشین.
فرض رو بر این بزاریم که شما یه ستون تو دیتا گرید ویو دارین که کد جنستونو داره. اسم ستون هم بزاریم ClnProductId
حالا وقتی که فاکتور ثبت بشه یه textBox هم دارین که تو اون تعداد اجناس جدید رو وارد میکنید. اسم اینو هم میزاریم TxtProductBalance
باید یه select بزنیم (به ازای هر ردیف از فاکتور):
"select balance from stock where id="+DataGridView["ClnProductId",DataGridView.CurrentRow.Index].Value.Tostring()
جواب این کوئری یه عدد هستش که همون موجودی جنس مورد نظر تو انبارتونه و اونو به یه متغیر به اسم StockBalance انتصاب دادین
حالا برای update جدول (باز هم به ازای هر ردیف از فاکتور):
"update stock set balance="StockBalance+int32.parse(TxtProductBalance)+" where id="+DataGridView["ClnProductId",DataGridView.CurrentRow.Index].Value.Tostring()
این برداشت من از سوالتون بود. امیدوارم که درست باشه و تونسته باشم کمکتون کنم.

alonmahdi
شنبه 23 شهریور 1392, 09:14 صبح
اگه با این همه پاسخ که هر کدوم از هر نظری به سوال نگاه شده و میشه گفت تمام جوانب بررسی شد به پاسخت نرسیدی چند تا عکس بذار شاید بشه یک جور کمکت کرد

tooraj_azizi_1035
شنبه 23 شهریور 1392, 11:46 صبح
در ورود کالا به انبار تاریخ ورود خروج هم باید ثبت بشه در اینصورت باید کد کالا به همراه تعداد وارد شده یا خارج شده باید ثبت بشه و هنگام گزارش گیری مجموع ورودی ها و خروجی ها موجودی فعلی رو نمایش میده.
شما باید یک ComboBox در گریدتون بگذارید تا کاربر محصول رو انتخاب کنه و تعداد رو وارد کنه منفی به معنی خروج هست.
برای هر ورود خروج یک رکورد ثبت میشه و از مشخصات کالا فقط کد اون.

مهرداد صفا
شنبه 23 شهریور 1392, 12:42 عصر
سلام دوستان عزیز من یک برنامه انبار داری دارم مینویسم وقتی که من فاکتور خرید ثبت میکنم و اقلام اون فاکتور وارد دیتا گرید میکنم. میخوام تعداد اون کالا ها در انبار افزایش پیدا کنه

مثلا من در انبار

4 تا موس دارم
5 تا کیبور

حالا میخوام یک فاکتور خرید جدید ثبت کنم

50 تا موس خریدم
90 تا کیبورد

میخوام بعد از ثبت فاکتور تعداد کالا ها افزایش پیدا کنه به شکل زیر

موس بشه 54 تا

کیبورد بشه 95 تا

ممنون میشم راهنمایی کنید

با سلام.
درحالت عادی باید با یک دستور update قابل حل باشد:


"update table set count = count + " + DataGrid.CurrentRow.Cells["count"].Value.ToString()+" where ID ="+DataGrid.CurrentRow.Cells["id"].Value.ToString();

mohammad2407
جمعه 13 دی 1392, 04:59 صبح
با سلام.
درحالت عادی باید با یک دستور update قابل حل باشد:


"update table set count = count + " + DataGrid.CurrentRow.Cells["count"].Value.ToString()+" where ID ="+DataGrid.CurrentRow.Cells["id"].Value.ToString();

آقا مهرداد پاسخ شما پاسخ خوبی هست ولی تمام اقلام اول به دیتا گرید فرستاده میشن و بعد ثبت نهایی میشن و درون بانک ذخیره.

هر کالا یک کد داره .

در این دیتا گرید احتمال داره 50 تا کالای مختلف با کد های مختلف وجود داشته باشه

ما باید اول کد هر کالا رو (شماره فنی)در بانک جستجو کنیم ، مقدار اون کالا رو بدست بیاریم و بعد به مقدار اون اضافه کنیم

به ترتیب برای هر رکورد دیتا گرید باید این مراحل طی بشه

اقا مهرداد ما داریم فاکتور درج میکنیم . داخل این فاکتور محصولات مختلفی هست .

اول باید هر رکورد از دیتا گرید پیدا کنیم و بعد عملیات اضافه کردن رو انجام بدیم

اقا مهرداد به عکس زیر دقت کنید

http://up.vbiran.ir/uploads/02014-01-03%2005-34-20%20%D9%82_2435313887151929484.png

hmbarnamenevis
جمعه 13 دی 1392, 09:21 صبح
ابتدا کد مربوط به این فرم:
if (dataGridView1.Rows.Count == 0)
{
MessageBox.Show("هیچ کالایی درج نشده است");
return;
}
this.Cursor = Cursors.WaitCursor;
//Addkala************************
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
ClsAddKala ak = new ClsAddKala();
ak.Code = Int32.Parse(dataGridView1["Code", i].Value.ToString());
ak.T = double.Parse(dataGridView1["T", i].Value.ToString());
ak.AddKala();
}
//*************************
this.Cursor = Cursors.Default;
this.DialogResult = DialogResult.OK;



کلاس مربوط به اضافه کردن تعداد:
class ClsAddkala
{
public int Code;
public double T;
/*table of kala
Code شماره فنی
T تعداد کالا
*/
public void Addkala()
{
string sql="update tblKala set T=T+{0} where Code={1}";
sql=string.format(sql,this.T,this.Code);
//دستور داخل اسکیوال را باید اجرا کنی
}
}

مهرداد صفا
جمعه 13 دی 1392, 10:22 صبح
سلام دوست من.
1- اگر از روشی که آقای عزیزی گفتند استفاده می کردید تعداد موجودی، با یک کوئری روی جدول فاکتورها، به دست آمده بود.
2- از یک trigger هم می توانید استفاده کنید تا با ثبت هر فاکتور جدید، تعداد موجودی به طور خودکار تغییر کند.
3- کدی رو که گفتم اگر در یک حلقه به ازای هر ردیف از DataGridView روی پایگاه اجرا کنید، نباید مشکل خاصی داشته باشید؛ در غیر این صورت لطفا مشکلتون رو به طور دقیق (ترجیحا به همراه کد و یا متن خطا) مطرح کنید.
4- اگر از Linq استفاده می کنید:


foreach(DataGridViewRow row in myGridView.Rows)
DB.Stock.Where(r=>r.ID.ToString==r["ID"].Value.ToString()).Single().Count+=row["Count").Value;

mohammad2407
جمعه 13 دی 1392, 17:25 عصر
اقا مهرداد الان یه مشکل دیگه پیش امد کد ثبت اطلاعات فاکتور من این هست به صورت کامل


foreach (DataGridViewRow row in dataGridView1.Rows)
foreach (DataGridViewCell cell in row.Cells)
if (Convert.ToString(cell.Value) == namberfanif.Text)
{
MessageBox.Show("تکراری");
}
else
{
// پیغام خطا
// ثبت رکورد بعدی


try
{
db.Connection.Open();
db.Transaction = db.Connection.BeginTransaction();

// ثبت هدر فاکتور
H_factoor tb = new H_factoor();
var H_factoor_query = db.H_factoors;
tb.date = txtdate.Text;
tb.numberpfactoor = txtnumberpfactoor.Text;
tb.numberfactor = txtnumberfactoor.Text;
tb.manba = commanba.Text;
db.H_factoors.InsertOnSubmit(tb);
//ثبت تعداد کالا در انبار
if (!string.IsNullOrWhiteSpace(textBox4.Text))
{
Int64 ID = Int64.Parse(textBox4.Text);
/*Dar n => n.Number == ID nabayad Number ro bezarid,Code kala ro bezarid.*/
var item = db.anbars.SingleOrDefault(n => n.Number == ID);
if (item != null)
{
item.Number += Int64.Parse(textBox4.Text);
db.anbars.InsertOnSubmit(tb2);
}

}
////////END
// ثبت اقلام فاکتور
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{

// به ازای هر سطر یک شئ از کلاس مدل اقلام ساخته
// و مقداردهی میکنید
factoor tb_f = new factoor();
tb_f.codetype = Convert.ToString(dataGridView1.Rows[i].Cells[0].Value);
tb_f.namberfani = Convert.ToString(dataGridView1.Rows[i].Cells[1].Value);
tb_f.Number = Convert.ToInt64(dataGridView1.Rows[i].Cells[3].Value);
tb_f.Pricekharid = Convert.ToDecimal(dataGridView1.Rows[i].Cells[4].Value);
tb_f.Pricefroosh = Convert.ToDecimal(dataGridView1.Rows[i].Cells[5].Value);
tb_f.numberfactor = Convert.ToString(dataGridView1.Rows[i].Cells[7].Value);

db.factoors.InsertOnSubmit(tb_f);
}
db.SubmitChanges();
db.Transaction.Commit();
MessageBox.Show("با موفقیت تراکنش انجام شد.");
}
catch (Exception ex)
{
db.Transaction.Rollback();
MessageBox.Show(ex.Message, "اشکال در ثبت فاکتور");
}
finally
{
db.Transaction.Dispose();
db.Connection.Close();
}
}



وقتی به آخر کد میرسه مشکل پیش میاد و کد تکرار میشه و چندین بار اطلاعات میره ذخیره میکنه

پنجره ثبت به شدت تکرار میشه

یعنی این کد
MessageBox.Show("با موفقیت تراکنش انجام شد.");

با هر باز OKکردن یک بار دیگه اطلاعات ذخیره میکنه

مشکلی هم نمیبینم نمیدونم چرا اینطوری شد :لبخند:

Mahmoud.Afrad
جمعه 13 دی 1392, 23:54 عصر
این تکه کد برای چیه؟

foreach (DataGridViewCell cell in row.Cells)
{
if (Convert.ToString(cell.Value) == namberfanif.Text)
{
MessageBox.Show("تکراری");
}


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

mohammad2407
شنبه 14 دی 1392, 00:06 صبح
اقا محمود هر کالا یک کد داره به نام namberfanif نباید که تکراری (کالای تکراری ) وارد DataGridView بشه برای همین من با کد بالا در دیتا گرید namberfanif رو سرچ میکنم

حذف کردم مشکل باز شدن شت سر هم مسیج باکس حل شد .

اقا محمود من با کد زیر کالا رو وارد دیتا گرید میکنم


string[] roww = { codetype.Text.Trim(), namberfanif.Text.Trim(), kalaname.Text.Trim(), textBox4.Text.Trim(), price.Text.Trim(), pricef.Text.Trim(), pricesys.Text.Trim(), txtnumberfactoor.Text.Trim(), pricekool.Text = pricekool.Text.Replace(",", string.Empty).Trim() };
dataGridView1.Rows.Add(roww);


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

این کدو نوشتم که اصلا اجرا نمیشه و کلا ایراد داره


try
{
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (row.Cells[2].Value.ToString() == textBox4.Text)
{
row.Selected = true;
break;
}
else
{
string[] roww = { codetype.Text.Trim(), namberfanif.Text.Trim(), kalaname.Text.Trim(), textBox4.Text.Trim(), price.Text.Trim(), pricef.Text.Trim(), pricesys.Text.Trim(), txtnumberfactoor.Text.Trim(), pricekool.Text = pricekool.Text.Replace(",", string.Empty).Trim() };
dataGridView1.Rows.Add(roww);

}
}
}
catch (Exception exc)
{
MessageBox.Show(exc.Message);
}

Mahmoud.Afrad
شنبه 14 دی 1392, 00:20 صبح
برای اضافه کردن به گریدویو : مگر اندیس از صفر شروع نمیشه. پس باید از اندیس 1 که مربوط به شماره فنی هست استفاده کنی و یا اینکه نام ستون رو به جای اندیس بنویس:

bool flag = false;
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (row.Cells["namberfanif"].Value.ToString() == textBox4.Text)
{
row.Selected = true;
flag = true;
MessageBox.Show("تکراری");
break;
}
}

if (!flag)
{
string[] roww = { codetype.Text.Trim(), namberfanif.Text.Trim(), kalaname.Text.Trim(), textBox4.Text.Trim(), price.Text.Trim(), pricef.Text.Trim(), pricesys.Text.Trim(), txtnumberfactoor.Text.Trim(), pricekool.Text = pricekool.Text.Replace(",", string.Empty).Trim() };
dataGridView1.Rows.Add(roww);
}


برای ثبت اقلام و افزایش تعداد کالا:
1- نباید از حلقه تو در تو استفاده کنی چون در اون صورت اطلاعات تکراری ثبت میشه.
2- برای آپدیت نیازی به insert نیست.
3- هدر فاکتور باید خارج از حلقه ثبت بشه.
4- میتونی ثبت اقلام و آپدیت رو پشت سر هم انجام بدی و نیاز به حلقه دیگه ای نیست.
5- ایجاد تراکنش و commit کردن و از بین بردن اون باید خارج از حلقه صورت بگیره.

try
{
db.Connection.Open();
db.Transaction = db.Connection.BeginTransaction();

// ثبت هدر فاکتور
H_factoor tb = new H_factoor();
tb.date = txtdate.Text;
tb.numberpfactoor = txtnumberpfactoor.Text;
tb.numberfactor = txtnumberfactoor.Text;
tb.manba = commanba.Text;
db.H_factoors.InsertOnSubmit(tb);

foreach (DataGridViewRow row in dataGridView1.Rows)
{
// ثبت اقلام فاکتور
factoor tb_f = new factoor();
tb_f.codetype = Convert.ToString(row.Cells[0].Value);
tb_f.namberfani = Convert.ToString(row.Cells[1].Value);
tb_f.Number = Convert.ToInt64(row.Cells[3].Value);
tb_f.Pricekharid = Convert.ToDecimal(row.Cells[4].Value);
tb_f.Pricefroosh = Convert.ToDecimal(row.Cells[5].Value);
tb_f.numberfactor = Convert.ToString(row.Cells[7].Value);
db.factoors.InsertOnSubmit(tb_f);

//ثبت تعداد کالای مربوط به سطر مورد شمارش در حلقه در انبار
var item = db.anbars.SingleOrDefault(n => n.namberfani == tb_f.namberfani);
if (item != null)
{
item.Number += tb_f.Number;
}
}

db.SubmitChanges();
db.Transaction.Commit();
MessageBox.Show("با موفقیت تراکنش انجام شد.");
}
catch (Exception ex)
{
db.Transaction.Rollback();
MessageBox.Show(ex.Message, "اشکال در ثبت فاکتور");
}
finally
{
db.Transaction.Dispose();
db.Connection.Close();
}

mohammad2407
شنبه 14 دی 1392, 00:34 صبح
اقا محمود وقتی روی دکمه کلیک میکنم برای اضافه شدن هیچ عملیاتی صورت نمیگیره

اقا محمود به خاطر این نیست که گرید ویو به صورت دیفالت خالی هست ؟

اندیس و... هم تغییر دادم هیچ اتفاقی نیوفتاد


foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (row.Cells["namberfanif"].Value.ToString() == textBox4.Text)
{
row.Selected = true;
MessageBox.Show("تکراری");
break;
}
else
{
string[] roww = { codetype.Text.Trim(), namberfanif.Text.Trim(), kalaname.Text.Trim(), textBox4.Text.Trim(), price.Text.Trim(), pricef.Text.Trim(), pricesys.Text.Trim(), txtnumberfactoor.Text.Trim(), pricekool.Text = pricekool.Text.Replace(",", string.Empty).Trim() };
dataGridView1.Rows.Add(roww);

}
}

Mahmoud.Afrad
شنبه 14 دی 1392, 00:39 صبح
وقتی میدونی مشکل از کجاس پس چرا سوال میپرسی؟!!

bool flag = false;
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (row.Cells["namberfanif"].Value.ToString() == textBox4.Text)
{
row.Selected = true;
flag = true;
MessageBox.Show("تکراری");
break;
}
}

if (!flag || dataGridView1.Rows.Count == 0)
{
string[] roww = { codetype.Text.Trim(), namberfanif.Text.Trim(), kalaname.Text.Trim(), textBox4.Text.Trim(), price.Text.Trim(), pricef.Text.Trim(), pricesys.Text.Trim(), txtnumberfactoor.Text.Trim(), pricekool.Text = pricekool.Text.Replace(",", string.Empty).Trim() };
dataGridView1.Rows.Add(roww);
}

mohammad2407
شنبه 14 دی 1392, 01:04 صبح
اقا محمود عالی بود مرسی خیلی خیلی زیاد

حالا قسمت افزایش تعداد کالا:لبخند:

اقا محمود اسم دیتابیس من anbardari هست

هیدر فاکتور در تیبل H_factoor ذخیره میشه

اقلام فاکتور هم در تیبل factoor ذخیره میشه

ولی تیبل انبار جداست و اسم اون anbar هست

من میخوام برای افزایش تعداد کالا

وارد تیبل anbar بشم و namberfani با namberfani هر کالا چک کن

در تیبل anbar فیلدی هست به نام Number من میخوام تعداد به این فیلد بیاد یا بهتره بگم اضافه بشه

Mahmoud.Afrad
شنبه 14 دی 1392, 01:22 صبح
کد پست 19 رو دیدی؟

mohammad2407
شنبه 14 دی 1392, 01:31 صبح
اره ولی اضافه نمیشه

کد های سطح کلاس این فرم



namespace Irankhodro_Anbar
{
public partial class Form6 : Form
{

anbardariDataContext db;
anbar result;
manba manba = new manba();
anbar tb2 = new anbar();
public Form6()
{
InitializeComponent();
db = new anbardariDataContext();
}


من با این تیبل کار دارم.

anbar tb2 = new anbar();

Mahmoud.Afrad
شنبه 14 دی 1392, 01:41 صبح
اره ولی اضافه نمیشه

از کجا میدونی اضافه نمیشه. چه پیغامی میده؟ چه خطایی؟ هیچی که نمیشه.

اشیاء زیر هم فکر کنم کلا اضافه هستند.

anbar result;
manba manba = new manba();
anbar tb2 = new anbar();

mohammad2407
شنبه 14 دی 1392, 01:49 صبح
از کجا میدونی اضافه نمیشه.

http://www.up.internetstar.ir/do.php?imgf=138879014431.png
http://www.up.internetstar.ir/do.php?imgf=1388790144362.png



چه پیغامی میده

با موفقیت تراکنش انجام شد.

Mahmoud.Afrad
شنبه 14 دی 1392, 02:03 صبح
عملیات بدرستی انجام میشه. اشکال از نوع ستونی هست که تعریف کردی. چون نمیشه Null رو با یک عدد جمع کرد.
ستون Number رو از جدول حذف و دوباره یک ستون جدید اضافه کن با این تفاوت که باید Allow nulls رو برای این ستون غیرفعال کنی و همچنین Default value را روی 0 بزاری. با این کار مقدار اولیه Number برای همه سطرها 0 خواهد بود و عمل جمع بدرستی انجام میشه.
مدل LinqToSql رو هم آپدیت کن.

mohammad2407
شنبه 14 دی 1392, 02:15 صبح
اقا محمود کاملا درست میگین

var item = db.anbars.SingleOrDefault(n => n.namberfani == tb_f.namberfani);
if (item != null)
{
item.Number += tb_f.Number;
}


ولی فکر نمیکنید باید به جای

tb_f

tb2

چون Number در tb2 هست

Mahmoud.Afrad
شنبه 14 دی 1392, 02:27 صبح
گفتم که tb2 اضافه است و هیچ استفاده ای در این کدها ازش نشده.

دقت کنی متوجه میشی داده های هر سطر از دیتاگرید رو در شئ tb_f قرار میدیم. پس استفاده از tb_f یعنی استفاده از سطر مورد نظر از دیتاگرید.

mohammad2407
شنبه 14 دی 1392, 02:32 صبح
اقا محمود در کد زیر باید بره تیبل انبار باز کنه و کوئری روی فیلد Numberبزنه

در کد شما اصلا این مسیر تعریف نشده

کجا بره عدد رو اضافه کنه ؟

در tb_f فیلدی به نام Number وجود داره ولی برای تعداد واقعی کالا های این فاکتور هست

انبار اصلی یه جای دیگه هست :لبخند:

اقا محمود من میخوام بره به تیبل انبار ، فیلد Numberاپدیت کنه !

mohammad2407
شنبه 14 دی 1392, 04:01 صبح
اقا محمود من میخوا که تعداد کالا به فیلد Numberدر تیبل anbar اضافه کنم

شما الان داری به Numberدرتیبل factoor اضافه میکنی !

یعنی این کد

var item = db.anbars.Where(n => n.namberfani == tb_f.namberfani).FirstOrDefault();
if (item != null)
{
item.Number += tb_f.Number;

}

اقا محمود زحمت خیلی کشیدی هر چقدر تشکر کنم واقعا کم هست

خیلی خیلی بهم کمک کردی واقعا ممنون

خلی دوست دارم

فقط زحمت بکش پست های اسپم این تاپیک که خیلی زیاد هستن حذف کن

باز هم تشکر خدانگهدار

Mahmoud.Afrad
پنج شنبه 19 دی 1392, 22:02 عصر
شرط روی anbars زده میشه و بعد اضافه میشه.