سلامی مجدد خدمت استاد گرامی
ببخشید اگه کمی دیر شد...
فقط این نکته رو بگم که چون متد savechanges مشکل داشت فعلا توی فورم customer هستم
:لبخندساده:
Printable View
سلامی مجدد خدمت استاد گرامی
ببخشید اگه کمی دیر شد...
فقط این نکته رو بگم که چون متد savechanges مشکل داشت فعلا توی فورم customer هستم
:لبخندساده:
استاد ما منتظر ادامه آموزش هستیم میشه یک لطفی بکنید و درباره نحوه بکارگیری dialogresult جهت دریافت اطلاعات از فرم دوم یکم توضیح بدهید چون هنوز سورس دوتا ویدیو اخر رو نزاشتید من نتونستم این موضوع روخوب بفهم اگه خواستیم چند رکورد رو انتخاب کنیم چطور یعنی به حالت یک لیست از رکورد ها شاید من درست متوجه نشدم .
با تشکر
Error 1 Error 2019: Member Mapping specified is not valid. The type 'Edm.Guid[Nullable=False,DefaultValue=]' of member 'id' in type 'moshakhasatdbModel.moshtb' is not compatible with 'SqlServer.int[Nullable=False,DefaultValue=,StoreGeneratedPattern =Identity]' of member 'id' in type 'moshakhasatdbModel.Store.moshtb'. E:\formmoshakhasate gozinesh\frommoshakhasat\WindowsFormsApplication1\ Model1.edmx 46 13 WindowsFormsApplication1
با سلام من وقتی می خوام از guid استفاده کنم به این مشکل می خورم می خوام به یک عدد int که اینکریس منت شم یک یک گذاشتم بره بالا می خوام مقدار بدم ولی به صورت اتوماتیک چی کار کنم میشه راههنماییم کنید مرسی خیلی گنگ توضیح دادم میدونم ولی ترجمه وکمکم کنید دی مخم جواب کرده بازم مرسی
ببخشید دوستان که هنوز نتوستم آموزش بعدی رو آماده کنم. فعلا انرژی لازم رو برای ادامه کار ندارم تا مدتی شاید نتونم مطلب آموزشی جدیدی بذارم!!!
@notepad : کد شما بدرستی اجرا میشه! مشکلی نداره
@soroush_man_hd : برای مشخص کردن کلید اصلی باید از یک تایپ استفاده کنید Guid یا int . اگر Guid انتخاب کردید باید سمت database جنس کلید اصلی رو uniqueidentifier انتخاب کنید
مشکل شما اینجاست که سمت database کلید اصلی رو int انتخاب کردید و در مدلتون Guid انتخاب کردید که به هم نگاشت نمی شوند.
باز هم عذر خواهی می کنم از همه دوستان
ببخشید ادامه این اموزشها چی شد .... ان شالله که دم عید هست یک اموزش خوب بذارید
سلام دوباره
اقای مدیر من امروز برنامه فرم product را اجرا کردم و یک مشکل هست زمانی که مقادیر را وارد میکنیم و مقدار price که در ابتدا 0 هستش را پاک میکنیم و به جای ان حروف مثلا a به جای عدد وارد میکنیم و بر روی ذخیره کلیک میکنیم عمل ذخیره بدون پیغام خطا انجام میشه در صورتیکه نوع ما از نوع int هستش پس چرا کاراکتر قبول کرد و پیغام خطا نداد البته داخل بانک چیزی ذخیره نمی شود ؟؟؟
فیلم هایی که برای آموزش گذاشتین توی:
https://barnamenevis.org/showthread.p...AD%D9%84%D9%87
همه فیلترن!
جای دیگه میشه آپلود کنین؟
ببخشید اموزش قسمت سه لایه را نمیدید با استفاده از این روش
فکر نمی کنم دیگه بتونم این تاپیک رو ادامه بدم چون کاملا یک طرفه پیش می ره و کسی مشارکت نمی کنه و من هم فرصت و زمان کافی متاسفانه ندارم
خوب ما که تا اینجا جلو امدیم باید چه کار کنیم ؟؟؟؟ کجا را مطالعه کنیم برای یادگیریش ؟ پست شماره 127 را یک نگاه بندازید پاسخ اون سئوالم هنوز مانده
سلام.
من یه اشکال تو پروژ] دیدم.گفتم بگم شاید رفع شه.
اگه تو فرم Customerچند تا مشتری وارد کنی و بعد اونا رو حذف کنی و هیچی تو دیتاگرید ویو نباشه طبق قانونی که خودتون گفتید باید فقط کلید جدید فعال باشه که اینطور نیست.همین
با سلام من یک هفته ای میشه که کار رو EF رو شروع کردم. شکر خدا با کمک دوستان تونستم کدهایی رو که همیشه تو پروژه هام داشتم رو پیاده سازی کنم .فقط دو تا سوال باقی موند که دوستان منو به این تاپیک ارجاع دادن.که با بررسی تاپیک های مربوطه سوالات زیادی به ذهنم اومد و البته چند تا اررور تو پروژه؟احیانا دوستان پروژه کامل این بحث رو ندارن؟ممنون از دوستانی که این تاپیک ها رو راه میندازن
اجازه بدین چندتا از سوالتمو همین جا بپرسم؟
1-من از navigator استفاده نمی کنم و خودم با دکمه این روش رو پیاده سازی میکنم.که البته تو EF به مشکل خوردم.توتاپیک هامدیر navigator رو بهتردونستن .ایا برای پروژه های تجاری navigator از نظر ظاهر تو دید کاربر مشکل نداره؟
2-تو روش کلاسیک چند لایه کار میکردم .بعد از کار با با EF احساس کردم به دلیل جلوگیری از کندشدن سرعتو اینکه کدها خواناتراز روش کلاسیک هستند ، دیگه نباید از این روش استفاده کرد.الان برام سواله واقعا چندلایه بودن اینجا مفیده؟
باسلام من این برنامه رو از روآموزش هاش دنبال کردم.من BindingSource رو تو کدتعریف کردم.
1.private void Initialize(Order order)
{
contex = new StoreDBEntities();
if (order == null)
{
this.Order = new Order();
contex.Order.AddObject(this.Order);// add
}
else
{
this.Order = order;
contex.Order.Attach(order);
order.OrderDetail.Load();
}
if (this.Order.Date == DateTime.MinValue)
this.Order.Date = DateTime.Now;
bsOrder = new BindingSource();
bsOrder.DataSource = order;
bsOrderDetail = new BindingSource();
bsOrderDetail.DataSource = bsOrder;
// bsOrderDetails.DataMember = "OrderDetail";
bsCustomer = new BindingSource();
bsCustomer.DataSource = bsOrder ;
// bsCustomer.DataMember = "Customer";
//,false, DataSourceUpdateMode.Never false, DataSourceUpdateMode.OnPropertyChanged
// txt_customer.DataBindings.Add("Text", bsCustomer, "FullName");
}
از DataMember ها خطا میده
2. رووی فرم order برای انتخاب مشتری، رو کلیک دکمه
CustomerForm f = new CustomerForm(); //instance
DialogResult Result= f.ShowDialog ();
if (Result == DialogResult.OK)
{
contex.Customer .Attach (f.SelectedCustomer);
Order.Customer = f.SelectedCustomer;
}
حالا روی فرم مشتری، .اینو نوشتم
Customer customer = new Customer();
public Customer SelectedCustomer
{
get
{
Customer customer = bsCustomers.Current as Customer;
return customer;
}
set { customer =value ; }
}
برای رفرش دیتاگرید چی کارکنم.برای باردوم خطا میده
باسلام . من این پروژه رو از روی آموزش ها ساختم و روی یه تاپیک آپلود کردم و سوالاتم رو پرسیده بودم ولی نمی دونم را مدیران حذفش کردند؟!!!! بهتره همین جا بزارمش
فرم ثبت سفارش مشکل داره :آموزش فایل آخر.برام مهم نیست دوستان دیتاست ها رو روی فرم یا تو کد معرفی کنند . خلاصه مهم اینه که گرید اطلاعات رو نشون بده و سفارش ثبت بشه(حتی تو حالتی که در فایل های آموزشی بود bsOrder تو کد معرفی شده بود حالا چه تو گرید رو تو محیط دیزاین به dsOrder Detail که البته Datasource اون bsorder بودband کرده بودند؟) تا یادم نرفته برای انتخاب مشتری یه دکمه رو فرم کاستومر گذاشتم فعلا دوستان از همون دکمه استفاده کنند
با سلام من خیلی سرچ کردم دوستان لطف کنند مارو هم راه بندازند . مشکل اصلی من نمایش اطلاعات توی گرید است.چه طوری وقتی منبع داده اصلی ما که dsorder است تو محیط کد معرفی شده ، روی محیط دیزاین کالمن های گرید رو تونستند به به اون بایند کنند
باتشکر که سورس رو قراردادید انشاا.. دوستان در نظرسنجی شرکت کنند. فقط یه مشکل هست
اولین رکورد رو درست ثبت میکنه ولی دومین سفارش رو پیغام An error occurred while updating the entries. See the inner exception for details میده.مشکل چیه؟
ممنونم آقای gwbasic لطفا اگه امکانش هست به آموزش ها ادامه بدید تا بلا تکلیف نمونه من که خیلی حال کردم با این آموزش ها خیلی روان و مفید هستش.
باسلام وتشکر راستش نتونستم خطایابی کنم.
برای باراول که جدول orderdetail خالیه عمل ثبت سفارش رو انجام میده .اما برای ثبت رکورد بعدی(حتی با run مجددپروژه)در قسمت context.SaveChanges خطا میده .خط به خط که میرم هر سه bs مقدار گرفته اند. (البته عمل ویرایش به درستی انجام میشه. )
یه سوال دیگه که برام مطرحه در تابع AddProductToCurrentOrderDetails وقتی میگیم محصول قبلا تو کانتکس نباشه ،مگه معنیش این نیست که برای مشتری جاری این محصول رو انتخاب نکرده باشیم ؟! تو اجراهای من تحت هر شرایطی product = obj as Product اجرا میشه .توجه اگه بکنید متوجه میشید اگه بخایم به لیست سفارش ثبت شده قبلی هم یک قلم دیگه اضافه کنیم ، بعد از انتخاب محصول تو دو تارکورد از گرید محصول رو میزنه و بعد از ثبت سفارش دوباره همون پیغام خطا میاد
باسلام شرمنده من مدل رو جنریت کرده بودم ولی حواسم به باگ مربوط به تنظیم identity نبود.یه چیز جالبی که بهش برخورد کردم: من id هامو int گرفتم و تو اسکیوال identity کردم . دراین حالت نمی دونم واقعا چرا
sum += orderdetail.Price * orderdetail.Count; با خطا مواجه میشه نوع هردو ورودی int32و خروجی هم int32 معرفی شده .خطا: Cannot implicitly convert type 'int?' to 'int'. An explicit conversion exists (are you missing a cast?)
2- در OrdersForm_Load:این کدرولطفا توضیح بدید Orders = context.Order.Include("Customer").ToList();
3-سوالم راجع به AddProductToCurrentOrderDetails روهنوز متوجه نشدم(تاپیک قبلی)
ببینید یکی از خصوصیات برنامه نویس پیگیر بودن و سمج بودن ولی هیچ وقت نباید مطالعه اصولی فراموش بشه و همیشه الویت ها باید رعایت بشه منظورم اینه که اگه شما یکسری مفاهیم پایه ای رو ندونید در حل مشکلات زمان زیادی رو باید صرف کنید که براتون حتما آزار دهنده خواهد بود.
1- ربطی به identity نداره اگه به متن خطا دقت کنید متوجه می شید موضوع چیه؟ شما احتمالا Count یا Price رو nullable در دیتابیس تعریف کردین که در این صورت هنگام تولید مدل پراپرتی ای از جنس nullable تعریف می شه و باقیه ماجرا
2- کافیه معنی Include رو در EF بررسی کنید و همچنین Lazy Loading
3- با کدی که من بهتون دادم اجرا کنید بعید می دونم اضافه کردن یک قلم به سفارشی که قبلا ذخیره شده اشکالی ایجاد کنه چون وقتی سفارشی Load میشه اقلام سفارش در Context قرار می گیرند. بنابراین نباید مشکلی باشه. اگه این مورد مشکلی داشت با جزئیات بگید تا بررسی کنم
باتشکراز توجهتون .آره خطایابی مسئله مهمیه .من در حدی میدونم که برام پیش اومده وتجربه کردم..آیا منبعی هست که بتونه در این زمینه کمک کنه؟ممنون 1-تودیتابیس تنظیم بودولی تو مدلNullable=nounبود.حالا با Nullable=false یه قسمت دیگه کدهمین خطا رو میده درتابع AddProductToCurrentOrderDetails قسمت od.Price = product.Price.اصلا چرا با وجود اینکه فیلد قیمت مقدار داره باید به نال بودن یا نبودن حساس باشه؟ 2-من این قسمت رو با مقادیر متفاوت اجرا کرده بودم ونتیجه رو هم دیدم.حتی بدون این تکه کد. ولی درک این قضیه که چرا "Customer"جواب درست میده؟ آخه ما لیست سفارش میخایم ،مشتری چرا! 3-به گمونم سوالم رو درست مطرح نکردم .ثبت به درستی انجام میشه منظورم این بود که کدelse context.Product.Attach(product اینجا ضرورتی نداره .(به عبارت بهتر دراینجا هیچ وقت این خط اجرا نمیشه.درسته؟)
در فرم Orders لیست سفارشات نمایش داده می شه و هر سفارشی برای یک مشتری هست بنابراین نیاز هست که اطلاعات مشتری برای هر سفارش هم بارگذاری شود تا بتوان آن را نمایش داد ستون مشتری بر اساس مشخصات Customer پر می شه بنابراین نیاز هست که Load بشه
اما در مورد Attach کالا:
اگر Attach انجام نشه Product انتخاب شده در فرم Product به عنوان موجودیت جدید در نظر گرفته می شه و هنگام ذخیره یک رکورد جدید از Product با مشخصات قبلی و Idجدیدی ایجاد می شه پس بنابراین باید Attachکرد تا object service بتونه تشخیص بده که این موجودیت جدید نیست ولی اینکه قسمت elseاجرا نمی شه حق با شماست وقتی TryGetObjectByKey استفاده می شه باعث میشه که ابتدا productدر داخل contextجستجو بشه و اگه موجود نبود اون رو از database می خونه و این باعث می شه که خود بخود Attach صورت بگیره بنابراین نیازی به else نیست البته این مورد دوم که باعث می شه product دوباره از DB خونده بشه زیاد جالب نیست که باید اصلاح بشه ولی کد بدرستی وظیفش رو انجام می ده
با تشکر . نمیدونم این تاپیک ها تا کجا ادامه پیدا میکنه و قراره موضوع بعدی چی باشه؟ راستش لیست فازهای پروژه رو که نگاه میکردم ،دیدم فاز 2 گزارش است گزارش باlinq تو همین سایت بحث شده (شکرخدا کدش هم جواب میده).
من تو روش کلاسیک چندلایه کارمیکنم آیا اساتید اجازه میدن من یک فرم با استفاده از چندلایه ای بزارم تا راجع به ایرادات احتمالیش بحث بشه؟ اگه نظرمثبته بگید موضوع فرم جدید چی باشه .پیشاپیش ممنونم
از لفظ استاد خواهشا استفاده نکنید من هم مثل شما هستم. در مورد ادامه من انگیزه ای دیگه ندارم اما اگه فعالیتی صورت بگیره موافقم و سعی می کنم همراهی کنم.
پیشنهاد خوبی دادین در مورد چند لایه اگه کدتونو بذارید می تونیم روش بحث کنیم (امیدوارم بقیه دوستان هم همراهی کنند).
باسلام و آرزوی قبولی طاعات وعبادات
قراربود پروژه رو چندلایه بزارم ،اما متاسفانه تو یه سری کدهای اولیه به مشکل خوردم .صلاح رو براین دیدم ابتدا پروژه رو به سبک معمول بزارم تاباکمک دوستان ایراداتش گرفته بشه .بعد همین رو چندلایه کنم.برنامه ابتدا نام مدرس رو ثبت میکنه وبعد برنامه کلاسی مدرس رو مشخص میکنه(دکمه لیست کلاسها)
یکی از مواردی که منو واقعا دلسرد کرد از ادامه کار عدم دقت و توجه دوستان بود. تصور می کنم اصلا ویدیویی ندیدن فقط یکسری کد دیدن که دلیلشو نمی دونن برای چی نوشته شده !!!
دوستان این یک پروژه بود که شما طریقه کدنویسی رو در عمل ببینید. و مخاطبینشم برنامه نویس های با تجربه هست نه کسی که به لحاظ فنی در سطح پایینی قرار داره. برنامه نویس با تجربه برنامه نویسی هست که به تکنولوژی های مختلف آشنا هست مثل ADO.NET , Entity framework , Nhibernate و سوکت پروگرامینگ و چه می دونم هر چیزی که شما فکرش رو بکنی. اما یک برنامه نویس با تجربه لزوما یک برنامه نویس حرفه ای و قدرتمند نیست.یک برنامه نویس حرفه ای لزوما چه می دونم WPF نمی دونه و یا هزارو یک چیزه دیگه در عوض برنامه نویس حرفه ای اصول برنامه نویسی رو می دونه. اون می دونه که اصول کد نویسی چی هست. اون به ساده ترین شکل ممکن کد می نویسه. کدی که می نویسه برای هر کسی قابل فهم هست و اصول SOLID رو کاملا آگاه هست Design pattern ها رو به خوبی می دونه و می دونه که چه زمانی باید ازشون استفاده کنه
من نه EF آموزش دادم نه DataBinding و BindingSource ولی در عمل نشونتون دادم که چطور استفاده کنید. در عوض توقع دارم که این مفاهیم رو بدقت بررسی کنید. تعجب می کنم که با وجود BindingSource دوباره از BindingContext استفاده کردین. این نشون می ده که اصلا متوجه کاربردش نشدید. بقدری کدتون ایراد داره که نمی دونم چی باید بگم فقط توصیه می کنم چندبار دیگه ویدیو رو ببینید و با هر مفهومی مشکل داشتین بررسیش کنید.
باسلام وتشکر
من برنامه روعوض کردم .البته یک سری ایرادات هنوز داره.لطفا دوستان نظر بدن
ابتدا نام مدرس رو ثبت میکنه وبعد برنامه کلاسی مدرس رو مشخص میکنه(دکمه لیست کلاسها)
1-(فرمی که بدون نویگیتورکارشده)مشکل اصلی اینه که موقع ذخیره خطایThe changes to the database were committed successfully, but an error occurred while updating the object context. The ObjectContext might be in an inconsistent state. Inner exception message: AcceptChanges cannot continue because the object's key values conflict with another object in the ObjectStateManager. Make sure that the key values are unique before calling AcceptChanges.رو میده . البته توی بانک ثبت میشه . اگه دلیل خطارو بخام مختصرا بگم
private void Initialize()من باید ابتدا مشخصات مدرس رو ثبت کنم ،بعد براش کلاس تعریف کنم .ولی فکرمیکنم دلیل خطا اینه که این وابستگی براش مشخص نشده
{
bsteacher.DataSource = context.Tbl_teacher;
bslist.DataSource = bsteacher;
bslist.DataMember = "Tbl_list";
}
خطا هنگام ثبت مدرس
private void Save()
{
bsteacher.EndEdit();
bslist.EndEdit();
context.SaveChanges();
}
2-برای بهینه شدن فرم frm_listچه روشی رو پیشنهاد میدید؟
من پست قبلی رو ویرایش کردم و منتظر نظر دوستان هستم.باتشکر
سلام
من با آموزش های در اینجا شروع کردم به ساخت نرم افزاری واسه مشاور املاک
متاسفانه مشکلی که دارم اینه که تو همه ی فرم هام وقتی مقداری رو واسه ویرایش میزنم و مقدار داخل فیلد رو عوش میکنم و بعدش انصراف رو میزنم تابع CancelEdit بایندینگ سورس به درستی عمل نمیکنه و متغیر در دیتاگریدویو تغییر میکنه اما تو دیتابیس مشکلی نیست و برنامه به خوبی اجرا میشه
پروژمم میذارم که هم بقیه بتونن استفاده کنن هم اگه کسی فهمید مشکلم چیه بهم بگه.
سلام من هم این مشکل رو دارم .روی پروژه Store تو فرم ProductrFormاین اتفاق نمیفته ! اگه دقت کنید به محض اینکه از روی تکس خارج میشیم مقدار گرید هم عوض میشه (اینجا اتفاقی که نباید میفته).
راستی می تونم بپرسم فرم املاک تون رو چه طوری اجرا میکنید؟؟
لطفا دوستان روی پروژه تاپیک 150 هم نظر بدند.ممنون
سلام
تو پروژه مشاور املاک تو فرم منطقه برای رویداد کلیک دکمه btnAdd کدش یه مشکلی داشت که الان فهمیدم این کد صحیحش هستش
private void btnAdd_Click(object sender, EventArgs e)
{
BsMantaghe.AddNew();
Mantaghe tempMantaghe = (Mantaghe)BsMantaghe.Current;
tempMantaghe.Shahr = cmbShahr.SelectedItem as Shahr;
AddOrEditMode = true;
}
منظورتونو نفهمیدم، این برنامه که هنوز کامل نیستش فقط جندتا فرم هستش و دیتابیس و مدل دیگهنقل قول:
راستی می تونم بپرسم فرم املاک تون رو چه طوری اجرا میکنید؟؟
سلام . به نظرمن این فرم ایراد داره .چرا از بیندینگ استفاده نکردید . ارسال بیندینگ سورس به این فرم ها چه ضرورتی داره؟
لطفا دوستان روی خطای تاپیک 150 هم بحث کنند .خیلی برام مهمه .
دوستانی که با EF کارمیکنن بیزحمت یه نگاهی به برنامه من بندازند . خیلی عجله دارم .ممنون
سلام اگه میخای هم یوزر هم پسورد رو چک کنید باید از عملگر && استفاده کنید !(شرط منطقی تون اشتباهه)
ببخش اون قسمتشو حواسم نبود از || یا استفاده کردم.
مشکلم سر اجرا شرط بعدش هست میخوام اگه صحیح بود متن دکمه بشه ok ؟ اگر هم نبود که هیچ؟
خوب شما باید null بودن یا نبودن pro رو چک کنید.موفق باشید
لطفا دوستان تکه کد تو این تاپیک نذارن
از دوستان کسی نمیدونه چرا تو بعضی کدها تابع CancelEdit بایندینگ سورس کار نمیکنه؟