PDA

View Full Version : سوال: پیغام خطا موقع ویرایش



bmvgod
سه شنبه 23 آذر 1395, 06:53 صبح
باسلام خدمت دوستان
یک رامه دارم وقتی داخل جدولم یک رکورد وجود دارد بخوبی میتواتنم از طریق برنامه یرایش کنم،اما وقتی داخل جدولم بیشتر از یک رکورد وارد میکنم موقع ویرایش به پیغام زیر برمی خورم:
143738

و از کد زیر استفاده کردم:

var db = new LinqToSqlDataContext();
var QEdit = db.PhoneBooks.Single();
QEdit.Full_Name=txtFullName.Text;
QEdit.NickName = txtNickName.Text;
QEdit.Business = txtBussinece.Text;
QEdit.Company = txtCo.Text;
QEdit.Mobil = txtMobail.Text;
QEdit.Tell = txtTell.Text;
QEdit.Fax = txtFax.Text;
QEdit.Email = txtEmail.Text;
QEdit.Web_Site = txtWebSite.Text;
QEdit.Address = txtAddress.Text;
db.SubmitChanges();
cChengControls.ResetControls(this);

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

codedeveloper
سه شنبه 23 آذر 1395, 10:01 صبح
var db = new LinqToSqlDataContext();
var QEdit = db.PhoneBooks.FirstOrDefault(x=>x.ID==کد یا هر فیلد دیگری که با شرط گذاری آن مینوانید به طور مشخص و دقیق فقط یک رکورد را واکشی کنید)
QEdit.Full_Name=txtFullName.Text;
QEdit.NickName = txtNickName.Text;
QEdit.Business = txtBussinece.Text;
QEdit.Company = txtCo.Text;
QEdit.Mobil = txtMobail.Text;
QEdit.Tell = txtTell.Text;
QEdit.Fax = txtFax.Text;
QEdit.Email = txtEmail.Text;
QEdit.Web_Site = txtWebSite.Text;
QEdit.Address = txtAddress.Text;
db.SubmitChanges();

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

CsharpNevisi
سه شنبه 23 آذر 1395, 10:05 صبح
خب این خطا طبیعیه .
var QEdit = db.PhoneBooks.Single();
این کد فقط زمانی کا میکنه که فقط تو کالکشن مربوطه فقط 1 رکورد وجود داشته باشه .. اگه کالکشن خالی باشه یا بیش از 1 رکورد داشته باشه خطا میده , شما باید شرطی بزارید که کالکشن شما رو فیلتر کنه و یک رکورد برگردونه بعدش سینگلش کنید , بهتره از دستوره FirstOrDefault این دستورد رکورد اولو برمیگردونه , اگرم داده نباشه تو کالکشن null برمیگردونه و خطا نمیده .

bmvgod
سه شنبه 23 آذر 1395, 15:46 عصر
مشکل دیگه من اینکه جدول نمایش لیست من در فرمی بنام frmListPhone هست و می خوام با انتخاب رکورد مورد نظر داده ها به صفحه ای دیگه منتقل بشه،در این صورت ID رو چطوری باید چک کنم و ویراش مربوطه رو ثبت کنم؟
من ازین روش استفاده کردم:



frmListPhone flp = new frmListPhone();
int ID = int.Parse(flp.dataGridView1.CurrentRow.Cells[0].Value.ToString());
var QEdit = db.PhoneBooks.FirstOrDefault(ط=>ط.ID_Phone==ID);


ولی با خطای زیر برخورد میکنم:
143743

چکار باید کنم؟ممنون میشم راهنماییم کنید

codedeveloper
چهارشنبه 24 آذر 1395, 16:45 عصر
دوست عزیز خطای پیش اومده میتونه برا این باشه که سطری روی دیتاگرید انتخاب نشده و اصولا CurrentRow خالی هستش و Null میده، که در این صورت cells هم وجود نداره، پس خطا میده.
برای حل سوالتون هم اول سطری رو که از گرید انتخاب شده رو با همین روشی که نوشتین ID اش رو بدست بیارین و بعد اون رو به فرمی که میخوایین نمایش بده ارسال کنید و بعد اونجا با دستوری که در پست قبلی عرض کردم اطلاعات رو واکشی کنید و در باکس ها نمایش بدین و بعد از این که کاربر دکمه ذخیره رو زد اطلاعات رو در همون ابجکتی که اول واکشی کردین و پر بود ست کنید و بعد از Savechange استفاده کنید، مطمئنن ذخیره میشه.

bmvgod
جمعه 10 دی 1395, 20:38 عصر
هرکاری میکنم جواب نمیده کل پروژه رو گذاشتم،میشه لطفی کنید نگاهی بندازید و ببینید مشکل از کجاست؟
باتشکر

hamed_611
جمعه 10 دی 1395, 22:00 عصر
سلام..مشکلش فقط این بود که id رو از فرم frmListPhone به فرم frmPhoneBook نفرستادی .. این کد رو به رویداد دابل کلیک گریدویو داخل فرم frmListPhone اضافه کن.... frmEdit.idnum = ID;

bmvgod
شنبه 11 دی 1395, 01:31 صبح
سلام..مشکلش فقط این بود که id رو از فرم frmListPhone به فرم frmPhoneBook نفرستادی .. این کد رو به رویداد دابل کلیک گریدویو داخل فرم frmListPhone اضافه کن.... frmEdit.idnum = ID;

باسپاس فروان از راهنماییتون.
فقط راهنماییه آخر اگه بخوام در فرم frmPhoneBook بجای استفاده از idnum از روش زیر استفاده کنم چجوری باید انجامش بدم:

private void InsertEdit_Click(object sender, EventArgs e)
{
var db = new LinqToSqlDataContext();
frmListPhone flp = new frmListPhone();
int ID = int.Parse(flp.dataGridView1.CurrentRow.Cells[0].Value.ToString());
var QEdit = db.PhoneBooks.FirstOrDefault(x => x.ID_Phone == ID);
QEdit.Full_Name=txtFullName.Text;
QEdit.NickName = txtNickName.Text;
QEdit.Business = txtBussinece.Text;
QEdit.Company = txtCo.Text;
QEdit.Mobil = txtMobail.Text;
QEdit.Tell = txtTell.Text;
QEdit.Fax = txtFax.Text;
QEdit.Email = txtEmail.Text;
QEdit.Web_Site = txtWebSite.Text;
QEdit.Address = txtAddress.Text;
db.SubmitChanges();
cChengControls.ResetControls(this);
}

یعنی idnum رو کلاً حذف کنم،حتی این خط رو:


frmListPhone flp;
public int idnum
{
get;
set;
}

باز ضمیمه رو با تغییراتی که در بالا گفتم گذاشتم.
باتشکر از شما دوست عزیز