PDA

View Full Version : سوال: datagridview شماره ردیف را تکراری نمایش میدهد



bmvgod
پنج شنبه 13 دی 1397, 00:29 صبح
باسلام خدمت دوستان
در پروژم بعد از اینکه عمل درج انجام میشه، پیغامی گذاشتم مبنی بر اینکه: آیا اقلام جدیدی میخواهید اضافه کنید؟
که کاربر اگر گزینه Yes را انتخاب کنه، دوباره اطلاعات رو میگیره و با همون شماره فاکتور و تاریخ درج میکنه.
اطلاعات درج میشه ولی مشکل اینکه شماره ردیفم در گرید ویو تکراری نمایش میده، درحالی که در جدول دیتابیس شماره ردیف درسته درج شده.
من از کد زیر استفاده کردم:

private void btnInsert_Click(object sender, EventArgs e)
{
db = new LinqToTrazoDataContext();
var fcTable = new FactorSaleTable();

fcTable.SaleDate = DateTime.Now;
fcTable.FactorNo = int.Parse(txtCodFactor.Text);
fcTable.CommodCodFact = txtSaleCodCommodity.Text;
fcTable.CommodName = cmbCommodityName.Text;
fcTable.CompanyName = txtNameCO.Text;
fcTable.Number = Int16.Parse(txtNumber.Text);
fcTable.TotalPrice = float.Parse(txtTotalPrice.Text);
fcTable.Weight = float.Parse(txtWeight.Text);
fcTable.TotalWeight = float.Parse(txtTotalWeight.Text);
fcTable.CommodSize = txtSize.Text;
fcTable.UnitPrice = float.Parse(txtUnitPrice.Text);
fcTable.Tax = float.Parse(txtTax.Text);
fcTable.Dicount = float.Parse(txtTax.Text);

db.FactorSaleTables.InsertOnSubmit(fcTable);
db.SubmitChanges();
dgvSalesInvoi.DataSource = db.FactorSaleTables;
DialogResult result = MessageBox.Show("آیا اقلام جدیدی میخواهید وارد کنید؟",
"وضعیت خرید", MessageBoxButtons.YesNo, MessageBoxIcon.Question,
MessageBoxDefaultButton.Button1, MessageBoxOptions.RtlReading);
if (result == DialogResult.Yes)
{
txtNumber.Text = "0";
txtWeight.Text = "0";
txtTotalWeight.Text = "0";
txtTotalPrice.Text = "0";

db = new LinqToTrazoDataContext();
fcTableYes = new FactorSaleTable();
fcTableYes.SaleDate = DateTime.Now;
fcTableYes.FactorNo = int.Parse(txtCodFactor.Text);
fcTableYes.CommodCodFact = txtSaleCodCommodity.Text;
fcTableYes.CommodName = cmbCommodityName.Text;
fcTableYes.CompanyName = txtNameCO.Text;
fcTableYes.Number = Int16.Parse(txtNumber.Text);
fcTableYes.TotalPrice = float.Parse(txtTotalPrice.Text);
fcTableYes.Weight = float.Parse(txtWeight.Text);
fcTableYes.TotalWeight = float.Parse(txtTotalWeight.Text);
fcTableYes.CommodSize = txtSize.Text;
fcTableYes.UnitPrice = float.Parse(txtUnitPrice.Text);
fcTableYes.Tax = float.Parse(txtTax.Text);
fcTableYes.Dicount = float.Parse(txtTax.Text);

db.FactorSaleTables.InsertOnSubmit(fcTableYes);
db.SubmitChanges();
dgvSalesInvoi.DataSource = db.FactorSaleTables;
}
else if (result == DialogResult.No)
{
var lastRecord = db.FactorSaleTables.Select(fn => fn.FactorNo);
txtCodFactor.Text = (lastRecord.Max() + 1).ToString();
txtNumber.Clear();
txtWeight.Clear();
txtTotalWeight.Clear();
txtTotalPrice.Clear();
}
if (btnInsert.Text == "ویرایش")
{
SelectedIndexId = int.Parse(dgvSalesInvoi.CurrentRow.Cells["RowFact"].Value.ToString());

db = new LinqToTrazoDataContext();
var fcTableEdit = db.FactorSaleTables.Where(c=>c.RowFact==SelectedIndexId).Single();
//SaleDate = DateTime.Now,
//FactorNo = int.Parse(txtCodFactor.Text),
fcTableEdit.CommodCodFact = txtSaleCodCommodity.Text;
fcTableEdit.CommodName = cmbCommodityName.Text;
fcTableEdit.CompanyName = txtNameCO.Text;
fcTableEdit.Number = Int16.Parse(txtNumber.Text);
fcTableEdit.TotalPrice = float.Parse(txtTotalPrice.Text);
fcTableEdit.Weight = float.Parse(txtWeight.Text);
fcTableEdit.TotalWeight = float.Parse(txtTotalWeight.Text);
fcTableEdit.CommodSize = txtSize.Text;
fcTableEdit.UnitPrice = float.Parse(txtUnitPrice.Text);
fcTableEdit.Tax = float.Parse(txtTax.Text);
fcTableEdit.Dicount = float.Parse(txtTax.Text);

btnInsert.Text = "درج";
//db.FactorSaleTables.InsertOnSubmit(fcTableEdit);
db.SubmitChanges();
dgvSalesInvoi.DataSource = db.FactorSaleTables;

txtNumber.Clear();
txtWeight.Clear();
txtTotalWeight.Clear();
txtTotalPrice.Clear();
}
}

ردیف جدل فاکتورم در دیتابیس بصورت زیره:
149549
همانطور که میبینید ریف تکراری ندارم.
ولی در گریدویم پروژم بعد از اینکه هر بار قبول میکنم که میخوام اقلام جدید وارد کنم،ردیف تکراری در گرید ویو نمایش میده، ولی برا اقلام جدید نه،برنامه درست کار میکنه، فقط شماره ردیف به اندازه تعداد اقلامی که با یک شماره فاکتور ثبت شده فاصلست،گرید ویو پروژه بصورت زیره:
149550


ولی شماره ردیف در دیتابیس درست درج شده.
ممنون میشم راهنماییم کنید که کدم کجاش مشکل داره و چه کدی باید بجاش بنویسم؟
اگر تکنیک برنامم هم مشکل داره یا نظری بهتر دارید ممنون میشم راهنماییم کنید.
با تشکر

bmvgod
پنج شنبه 13 دی 1397, 23:46 عصر
خیلی از دوستان نسبت به اینجانب بسیار لطف داشتن و راهنماییم کردن.

ولی در مورد این تاپیک کسی نمیتونه راهنماییم کنه؟ :ناراحت::ناراحت::ناراحت::نار حت::ناراحت:

ژیار رحیمی
جمعه 14 دی 1397, 15:38 عصر
سلام
روش مرسوم اینه که شما شماره فاکتور رو اتومات generate کنی و فقط در یه label به کاربر نمایش بدی
بجای خط 36 از کد بالا بهتره به اینصورت کد رو جایگزین کنی

var lastRecord = db.FactorSaleTables.Select(fn => fn.FactorNo);
fcTableYes.FactorNo = (lastRecord.Max() + 1);

bmvgod
شنبه 15 دی 1397, 16:15 عصر
سلام
روش مرسوم اینه که شما شماره فاکتور رو اتومات generate کنی و فقط در یه label به کاربر نمایش بدی
بجای خط 36 از کد بالا بهتره به اینصورت کد رو جایگزین کنی

var lastRecord = db.FactorSaleTables.Select(fn => fn.FactorNo);
fcTableYes.FactorNo = (lastRecord.Max() + 1);


آقای رحیمی واقعاً ممنون از راهنماییتون

bmvgod
شنبه 15 دی 1397, 16:17 عصر
نظرتون مشکل تکراری نمایش دادن شماره ردیف از کجاست؟

ژیار رحیمی
یک شنبه 16 دی 1397, 20:01 عصر
مشکل اینه که شما textbox شماره ردیف رو بعداز ذخیره رکورد با شماره جدید update نمیکنی

bmvgod
یک شنبه 16 دی 1397, 21:28 عصر
مشکل اینه که شما textbox شماره ردیف رو بعداز ذخیره رکورد با شماره جدید update نمیکنی

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

danialafshari
دوشنبه 17 دی 1397, 18:23 عصر
با سلام
جدا از کدتون که کاری بهش ندارم ظاهراً شما دارید همه اطلاعات رو در یک جدول ذخیره می کنید (همانند اکسل) که بنظر من اینکار اشتباست
در این مورد قبلاً توضیح دادم شما برای جلوگیری از افزونگی داده نیاز به حداقل سه جدول دارید
یک جدول فاکتور - یک جدول اقلام فاکتور - یک جدول کالا
که ارتباط بین فاکتور و اقلام فاکتور 1 به n هست. اگر یک فاکتور داشته باشید به ازاش چندین قلم جنس دارید که از جدول کالا پر میشن
موفق باشید

bmvgod
سه شنبه 18 دی 1397, 23:43 عصر
با سلام
جدا از کدتون که کاری بهش ندارم ظاهراً شما دارید همه اطلاعات رو در یک جدول ذخیره می کنید (همانند اکسل) که بنظر من اینکار اشتباست
در این مورد قبلاً توضیح دادم شما برای جلوگیری از افزونگی داده نیاز به حداقل سه جدول دارید
یک جدول فاکتور - یک جدول اقلام فاکتور - یک جدول کالا
که ارتباط بین فاکتور و اقلام فاکتور 1 به n هست. اگر یک فاکتور داشته باشید به ازاش چندین قلم جنس دارید که از جدول کالا پر میشن
موفق باشید

ممنون از راهنماییتون.
من از دو جدول استفاده می کنم: جدول کالا و جدول فاکتور.
با این حال ایجاد افزونگی میکنه؟

danialafshari
چهارشنبه 19 دی 1397, 14:37 عصر
ممنون از راهنماییتون.
من از دو جدول استفاده می کنم: جدول کالا و جدول فاکتور.
با این حال ایجاد افزونگی میکنه؟
به صورت اصولی بله
جدول کالا که جدول پایه هست و فقط باید کالا ازش انتخاب بشه
جدول فاکتور هم که شامل عنوان فاکتور - تاریخ فاکتور و... هست
حالا رکورد های مربوط اقلام کجا ذخیره میشن ؟
به یک جدول اقلام فاکتور نیاز دارید
اگر توی فاکتور بزارید به شکل زیر میشه که اشتباست


عنوان فاکتور
تاریخ فاکتور
کد کالا
تعداد
قیمت


فاکتور1
1397/10/19
121
10
5000


فاکتور1
1397/10/19
122
6
2500

bmvgod
پنج شنبه 20 دی 1397, 23:02 عصر
به صورت اصولی بله
جدول کالا که جدول پایه هست و فقط باید کالا ازش انتخاب بشه
جدول فاکتور هم که شامل عنوان فاکتور - تاریخ فاکتور و... هست
حالا رکورد های مربوط اقلام کجا ذخیره میشن ؟
به یک جدول اقلام فاکتور نیاز دارید
اگر توی فاکتور بزارید به شکل زیر میشه که اشتباست


عنوان فاکتور
تاریخ فاکتور
کد کالا
تعداد
قیمت


فاکتور1
1397/10/19
121
10
5000


فاکتور1
1397/10/19
122
6
2500




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

danialafshari
جمعه 21 دی 1397, 13:59 عصر
بستگی به برنامه و تحلیلتون داره
بهتره در بخش مربوطه مطرح کنید
http://barnamenevis.org/forumdisplay.php?190-%D8%AA%D8%AD%D9%84%DB%8C%D9%84-%D9%88-%D8%B7%D8%B1%D8%A7%D8%AD%DB%8C-%D8%A8%D8%A7%D9%86%DA%A9-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA

MMR_1234
جمعه 21 دی 1397, 18:33 عصر
اونجا که کسی حضور نداره
فقط تاپیکها بازدید کننده داره
افسوس از یک پاسخ