منظورشون همون پست بود دیگه. یعنی همون 51 .
اگر قرار باشه اینجارو پاک بکنن میگن تاپیک رو پاک میکنن.
موفق باشید
Printable View
یعنی اینکه اول اسم متدی که میخواهی تعریف کنی را بنویس
بعدش براش پرانتز بزار و اگه متدت ارگومان ورودی داره براش توی پرانتز اونارو بنویس
بعدش سمی کولن بزن
چون تابعت تعریف نشده هستش زیر یه خط قرمز میکشه خود VS که بهت بگه این متد در کدت موجود نیست حالا 3 راه برای درست کردن متدت هست
1 - نوع( ش ز:لبخند: ) اینکه با ماوس روش وایسی تا مستطیل ابی کوچولو بیاد زیر اون خط قرمزه بعد با ماوس برو روش یه مربع باز میشه روش کلیک کن و اولین خطش رو بزن مثل زیر :
ضمیمه 78381
2- راهی که باید اون کلیدها رو از صفحه کلید بزنی
3- متد را دستی بساز:بامزه:نقل قول:
alt + shft + f10 که برای ساختن یک متد بود
یک مقدار هم در مورد کانکشن استرینگ توضیح بدید اینکه من همیشه فایل را در پوشه bin\Debug پروژه میگذاشتم و کانکشن استریگ را می نوشتم حالا تو این روش فکر کنم راحتر میشه با موضوع کانکشن استرینگ کنار امد .... در مورد این موضوع توضیح بدهید کانکش استرینگ به چه صورت در این روش پیاده سازی کنیم که هنگام ایجاد فایل setup با مشکل بر نخوریم ؟؟ مراحل کار را لطفا ....
با تشکر از همه
سلام
الان چند روز می شه که آقای gwbasic قسمت دوم پروژه رو تعریف کردن اما کسی کد ننوشته، این بار هم من شروع می کنم و اولین پروژه رو می گذارم که این تایپیک و آموزش ادامه پیدا کنه.
مطمئنا کامل کامل و خالی از اشکال نیست... راستش من مدتی هست که خودم درگیر یه پروژه هستم و نتونستم برای این پروژه خیلی وقت بگذارم، فقط سعی کردم حداقل ها رو داشته باشه.
خوشحال می شم که شما دوستان ایرادهای کارم رو بگین و کاملترش کنین :چشمک:
این هم اسکریپت دیتابیس :
USE [storeDB]
GO
/****** Object: Table [dbo].[Product] Script Date: 11/28/2011 22:34:22 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Product](
[Id] [uniqueidentifier] ROWGUIDCOL NOT NULL,
[Name] [nvarchar](50) NULL,
[Price] [int] NULL,
CONSTRAINT [PK_Product] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[Customer] Script Date: 11/28/2011 22:34:22 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Customer](
[Id] [uniqueidentifier] ROWGUIDCOL NOT NULL,
[Name] [nvarchar](50) NULL,
[Family] [nvarchar](50) NULL,
CONSTRAINT [PK_Customer] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Default [DF_Product_Id] Script Date: 11/28/2011 22:34:22 ******/
ALTER TABLE [dbo].[Product] ADD CONSTRAINT [DF_Product_Id] DEFAULT (newid()) FOR [Id]
GO
/****** Object: Default [DF_Customer_Id] Script Date: 11/28/2011 22:34:22 ******/
ALTER TABLE [dbo].[Customer] ADD CONSTRAINT [DF_Customer_Id] DEFAULT (newid()) FOR [Id]
GO
سلام
یه چیز باحال :
عیب های این برنامه را هر کی تونست پیدا کنه جایزه داره ::لبخند:
منهم مشکل دارم نمیدونم چرا اینجوری میشه بصورت فیلم گذاشتم یکبار خوبه مشکلی ایجاد نمیشه یعنی اطلاعات نمیپره یکبار هم که اجرا میکنی میبینی خالیه بانک ؟؟
این خود برنامه :
http://s2.picofile.com/file/7198115371/Store1.rar.html
اینم فیلم :
http://s1.picofile.com/file/71981523...itled.swf.html
بخشید اگر یک مقدار لهجه داره داخل فیلم : :قهقهه:
ما هر چی اینجا منتظر شدیم تا آموزش جدید بیاد کسی نیامد و جواب سئوالات ما را هم ندادند به خاطر همین اینبار با عکس میگذارم تا ببینم کسی جواب میده یا نه ؟؟؟
بیین این نمای اول solutoin explorer
http://s1.picofile.com/file/71994851..._01_021731.png
بقیه عکس ها را برای اینکه حجم تاپیک بالا نره فقط لینک میگذارم
من می خواهم حالتی را ایجاد کنم که دیتا بیس به بانک attach بشه امدم در فولدر data ازadd>new>existing item فایل storedb.mdf را اضافه کردم بعد امدم از قسمت models یک مدل جدید ایجاد کردم و باتوجه به دیتابیس کانکش و جدولها را انتخاب کردم برنامه اجرا میشه داده ها اضافه می شوند به جدول اما نمیدونم به محض اینکه من در کد برنامه تغییری را ایجاد کردم و برنامه را اجرا کردم مقادیر قبلی یعنی رکورد های قبلی که به بانک اضافه کردم نیستند از بین میرند
الان چند شبه دارم پیگیری میکنم هر جا سر میزنم تا مشکل را حل کنم نمیشه علت اینکار هم به این دلیله اگر پروژه را برروی سیستم دیگری انتقال دادم یا یک پروژه نصب ایجاد کردم دیگه مشکل اینکه اول برم بانک را به اس کیو ال attach کنم نداشته باشم خودش اینکارو انجام بده
این مرحله اخر بعد از اینکه بانک و مدل را به پروژه اضافه کردم :
http://s1.picofile.com/file/71994862..._01_022947.png
این هم محتویات داخل app
<add name="StoreDBEntities" connectionString="metadata=res://*/Models.StoreModel.csdl|res://*/Models.StoreModel.ssdl|res://*/Models.StoreModel.msl;provider=System.Data.SqlClie nt;provider connection string="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\Data\StoreDB.mdf;Integrated Security=True;User Instance=True;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />
اینم لینک سایر عکسها از مراحل کار :
http://s2.picofile.com/file/71994853..._01_021852.png
http://s1.picofile.com/file/71994855..._01_021929.png
http://s1.picofile.com/file/71994856..._01_022011.png
http://s2.picofile.com/file/71994858..._01_022054.png
http://s1.picofile.com/file/71994861..._01_022835.png
لااقل جواب مشکلات مردمو بدید اقا چرا مردم را اذیت میکنید یا تاپیک نزنید اینهم اموزشی یا اگر میزنید ادامه بدید کلاس دیگه نگذارید :شیطان::قهقهه: (اینهم یک نمونه اعصبانیت و اعتراض )
جناب noroozifar منو ببخشید که دیر جواب می دم چون می خواستم کدتون رو نگاه کنم و نکاتی رو در مورد کدتون بگم ولی فرصت نکردم
اما نکته ای که شما مشکل دارید اگه پست های منو حداقل (نه تو این تاپیک) دنبال کرده بودین جواب این سوالو دارم!!!
مشکلی که شما مطرح کردین مشکل نیست یه رفتار طبیعی هست که از Visual studio سر می زنه. هنگامی که شما تغییری توی کد ایجاد می کنید برنامه هنگام اجرا ابتدا Build میشه و فایلهای جدید توی فولدر Bin ریخته می شه بنابراین فایل StoreDB شما هم که در فولدر DataAccess برنامتون قرار داره دوباره توی Bin ریخته می شه و شما موقع اجرا می بینید که اطلاعات ازبین رفته چون شما داده هاتون رو از StoreDB که توی Bin هست می خونید (در اصل فایلی که در کنار Exe قرار می گیره) جای نگرنی هم نیست چون این مسئله هنگام Develop پیش می یاد. و جای دیگه چون شما فقط یک فایل StoreDBکنار exe دارین این اتفاق نمی افته. امیدوارم متوجه شده باشین
در مورد کدتون هم بعدا توضیح می دم
با تشکر از شما
بله من به این موضوع امروز قبل از پاسخ شما پی بردم چه اتفاقی رخ میدهد و برای اینکه این مشکل را در محیط برنامه نویسی حل کنم به قسمت app.config رفتم و آدرس attach را از AttachDbFilename=|DataDirectory|\Data\StoreDB.mdf به آدرس اجرای برنامه تغییر دادم AttachDbFilename=D:\TAMRINAT C#\TestEF2\TestEF2\Data\StoreDB.mdf و مشکل بر طرف شده و نکته اینجاست که من باید بعد از اجرا کامل پروژه دوباره آدرس attach کردن بانک را به حالت اول بر گردانم ..
از شما متشکرم خواهشا آموزش های جدید را بگذارید یک پروژه بزرگ دارم و می خواهم از معماری EF استفاده کنم و وقت کافی متاسفانه ندارم داخل کدهایم خواستم از storeprocdure استفاده کنم ....... که هنوز موفق نشدم منتظریم اقای مدیر :خجالت:
و اما کد جناب Noroozifar
چند مورد رو اشاره مي کنم در ادامه سعي کنيد رعايت کنيد:
1- از متد Fill براي پر کردن گريد استفاده شده ولي چرا از امکانات EntityFrameworkبراي حفظ و نگهداري و تغيير داده هايي که گرفته شده استفاده نکرديد.
2- براي پر کردن TextBox ها از Binding بايد استفاده ميشد BindingSource اين کارو براي شما ساده مي کنه که اصلا استفاده نکرديد.
3- براي اينکه مشخص کنيد فرم در حالت ويرايش هست از Tag مربوط به btnSave استفاده کردين که البته راه اشتباهي نيست ولي بهتره هيچ وقت از منطقتون رو توي UI قرار ندين و از اونجا بگيرين!!!
بهتره مثل IsDirty که توي ويديو بکار بردم شما هم فيلدي براي اين کار تعريف کنيد و هرجا لازم داشتيد از اون فيلد استفاده کنيد به کد زير توجه کيند:
براي حالت هاي مختلف فرم (اضافه يا ويرايش) اول يک enum تعريف مي کنم
public enum FormMode
{
Add,
Edit
}
سپس يک فيلد در سطح فرم تعريف ميکنم
private FormMode formMode;
حالا هرجا خواستم حالت فرم رو در اين فيلد ذخيره مي کنم مثلا توي متد Edit بجاي ست کردن btnSave.Tag مي نويسيم
formMode = FormMode.Edit;
و در نهايت هنگام ذخيره ( متد Ok !؟!؟!؟؟)
switch (formMode)
{
case FormMode.Add:
Insert();
break;
case FormMode.Edit:
UpTodate();
break;
default:
break;
}
4- براي توليد Id جديد يه کد غيره بهينه نوشتيد. چرا؟ ترجيح مي دم فقط کدتون رو بذارم بقيه دوستان توضيح بدن
private Int64 Next()
{
Int64 valu = 0;
try
{
using (StoreDBEntities Context = new StoreDBEntities())
{
// string Querystring = "Select VALUE c From Context.tblCustomers AS c";
var objQuery = Context.tblCustomers;
foreach (var item in objQuery)
{
if (item.Id > valu)
valu = item.Id;
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
return (valu + 1);
}
5- در متد delete شما از EntityCommand استفاده کردين ديگه نيازي به new کردن Context نيست
6- با اين روش پياده سازي که شما انجام دادين چرا توي Cancel متد Fillرو صدا زدين نيازي نيست
چون از BindingSource استفاده نکردم می بایست به یک طریق اطلاعات داخل دیتا گرید را refresh کنم به خاطر همین متد Fill را نوشتم و بعد من دارم هنوز امکانات مختلف entity framework را یاد میگیرم هنوز به طور کامل حفظ و نگهداری و تغییر داده ها را بلد نیستم با این روشنقل قول:
- از متد Fill براي پر کردن گريد استفاده شده ولي چرا از امکانات EntityFrameworkبراي حفظ و نگهداري و تغيير داده هايي که گرفته شده استفاده نکرديد.
2- براي پر کردن TextBox ها از Binding بايد استفاده ميشد BindingSource اين کارو براي شما ساده مي کنه که اصلا استفاده نکرديد.
اما برای پر کردن TextBox ها یک زمان میرسه که نیازی ندارم به محض انتخاب یک رکورد از دیتا گرید حالا به هر صورت دیگه اطلاعات همان زمان در TextBox ها نمایش داده بشه به خاطر همین دستی سعی کردم انها را پر کنم اما در کل منتطقی به نظر نمیاد و به ندرت این اتفاق رخ میدهد و بهتر و ساده تر همان استفاده از bindingsource بود
این روشی که شما توضیح دادید خیلی خوبه از این به بعد از این روش استفاده میکنم تا کدها ساختار و خوانایی بهتریی پیدا کنندنقل قول:
3- براي اينکه مشخص کنيد فرم در حالت ويرايش هست از Tag مربوط به btnSave استفاده کردين که البته راه اشتباهي نيست ولي بهتره هيچ وقت از منطقتون رو توي UI قرار ندين و از اونجا بگيرين!!!
ببینید من می خواستم با این روش در اصل ردیف را ایجاد کنم که رکوردها را شمارش کنه شما درست میگید منتطقی نیست و مشکلی که پیش میاد زمان حذف یک رکورد مثلا اگر من 4 رکورد داشته باشم شمارش id که به عنوان شماره ردیف استفاده کرده ام به صورت 1و2و3و4 می شود حالا در نظر بگیرید من رکورد 2 را حذف کنم شماره ردیف ها یا همان id ها به صورت 1و3و4 می شود میبیند شماره ردیف ها بهم خورده ولی به طور کلی همیشه ای دی که ایجاد میشه منحصر به فرد هستش ....نقل قول:
4- براي توليد Id جديد يه کد غيره بهينه نوشتيد. چرا؟ ترجيح مي دم فقط کدتون رو بذارم بقيه دوستان توضيح بدن
خوب حالا می خواستم بدونم برای اینکه شماره ردیف ها در یک دیتا گرید به درستی نمایش داده بشه بهتره چه کنم ؟؟؟
من خواستم فقط بدونم به چه طریق میشه از EntityCommand و پروسیجرهای نوشته شده در خود دیتابیس استفاده کنم ولی موفق نشدم و با Error مواجه شدم و میبیند کدهای قسمت حذف رکورد ناقصه منتظرم تا این مورد را آموزش بدهیدنقل قول:
- در متد delete شما از EntityCommand استفاده کردين ديگه نيازي به new کردن Context نيست
اگر نگاه کنید متد Cancel در انتهای عمل insertو Edit صدا شده و بهمین دلیل fill را داخل Cancel قرار دادم می توانستم قرار ندهم و بعد از متد cancel متد fill را صدا بزنم کلا برای اینکه یک refresh کامل صورت بگیرد بعد از اینکه کاربر لغو عملیات را زد اینکار را انجام دادمنقل قول:
- با اين روش پياده سازي که شما انجام دادين چرا توي Cancel متد Fillرو صدا زدين نيازي نيست
در نهایت واقعا از شما ممنونم کدهای من را با کمال دقت بررسی کردید و اشتباهات من را بهم گفتید ... من منتظر آموزشهای جدید شما هستم .... امیدوارم شما و کل کاربران این سایت همیشه موفق باشند
سلام
فکر کنم تو این تاپیک فقط من پست میدم
همینجور که آقای مدیر گفتند خواستم از BindingSourc استفاده کنم بنابر این یک bindingsource ایجاد کردم و دیتاگرید و تکست باکس ها ربهش وصل کردم اما با این تفاوت که از bindingnavigator نمی خواهم استفاده کنم بنابر این در رویداد new این کدها را نوشتم :
private void New()
{
try
{
grpGrid.Enabled = false;
grpValues.Enabled = true;
bsCustomer.AddNew();
btnSave.Tag = "btnNew";
btnEdit.Enabled = false;
btnNew.Enabled = true;
btnDelete.Enabled = false;
btnSave.Enabled = true;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
و در رویداد save هم این را نوشتم :
private void Insert()
{
try
{
bsCustomer.EndEdit();
Context.SaveChanges();
MessageBox.Show("ذخیره شد");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
اما کار نکرد و رکوردهای خالی یا غیر منطقی وارد میکنه البته توجه کنید که من کد ID را خودم ایجاد میکنم ؟
اینهم کدها : اگر امکان داره مشکلم را بر طرف کنید :
http://s2.picofile.com/file/7200708709/Store1.rar.html
نمی دونم چرا از BindingNavigator استفاده نمی کنی ولی بهر حال مورد خوبی مطرح شد.
همونطور که خودت توی کد نوشتی برای ایجاد یک customerجدید از متد AddNewمربوط به BindingSource استفاده کردی که کاملا درسته و Customer جدید به درستی ایجاد شده اما مشکل شما اینه که می خوای خودت Id جدید رو مقدار دهی کنی!
برای این کار وقتی شی جدید به BindingSource اضافه می شه رویداد AddingNew اتفاق می افته شما می تونی از این رویداد به شکل زیر برای مقدار دهی Id استفاده کنی
private void bsCustomer_AddingNew(object sender, AddingNewEventArgs e)
{
tblCustomer newCustomer= new tblCustomer();
newCustomer.Id = Next();
e.NewObject = newCustomer;
}
علتش فقط بر میگرده به طراحی فرمنقل قول:
نمی دونم چرا از BindingNavigator استفاده نمی کنی ولی بهر حال مورد خوبی مطرح شد.
BindingNavigator امکان هر جور تغییر در ظاهر رو داره. شما هر تغییری که بخوای می تونی روی اون انجام بدی. اون Toolstrip ای که خود BindingNavigator روی فرم قرار می ده رو شما می تونی کلا پاک کنی و کنترل های مورد نظر خودت رو بندازی مثلا می تونی همه اون Button هایی که توی پروژت گذاشتی رو به BindingNavigator بدی و بذاری کارای تکراری مثل اضافه و ... رو BindingNavigator خودش انجام بده.
اگه به نکته ای اشاره می کنم فقط منظورم اینه که راهی باز بشه برای بررسی جدید برای شما یکم به نکته ای که اشاره می کنم دقت کنید. حالا این نکته می تونی یکم وقت گیر باشه مثل BindingNavigator که کامل به چندو چون کار آشنا بشی و یا می تونه خیلی ساده بشه مثل موارد 4 یا 6 که در پست های قبلی گذاشتم. دقت کن که من جواب نمی خوام بلکه می خوام بیشتر بررسی کنی و خودت نتیجه رو همینجا بگی (چون من جواب رو می دونم)
من باید تمامی موارد EF را یاد بگیرم اضافه .. حذف ... جستجو(پیشرفته) ... ویرایش .... استفاده از پرسیجرهای نوشته شده در اس کیو ال ... در نهایت پروژه ای که دارم باید در معماری 3 لایه پیاده سازیش کنم ... و همیشه کدهایم را دستی می نوشتم و حالا می خواهم از شیوه های جدیدتر و با کد نویسی بهینه تر و خیلی موارد دیگر... من هر روز 3 الی 4 بار به این تاپیک سر میزنم تا از شما اساتید بیشتر یاد بگیرم و منتظر آموزشها، نکات کلیدی و غیره هستم ... هر مورد را چندین بار با اینکه وقتم محدوده بررسی میکنم تا اینکه همه چیز کامل دستم بیاد
بر روی BindingNavigator هم کار میکنم .... اگر کارایی این مورد زیاد باشه و باعث ایجاد راحتی کار بشه
الان دارم از bindingnavigator استفاده میکنم می خواهم قبل از حذف یک پیغام بده امدم و این کد را به رویداد کلیک حذف دادم اما قبل از پیغام رکورد را حذف میکنه بعد پیغام میده ؟؟؟:متفکر: چه کنم ؟؟؟
private void btnDelete_Click(object sender, EventArgs e)
{
DialogResult Result = MessageBox.Show("رکورد مورد نظر حذف شود ؟", "حذف رکورد", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2);
if (Result == DialogResult.No)
{
bsCustomer.CancelEdit();
}
}
سلام
ممنون از اینکه عیب های برنامم و پیدا کردین اما چون کسی حرفی ازشون نزد خودم میگم به کمک استاد پیداشدن :چشمک:
1 - من تو فرم مشتریم اشتباها tag هم به دیتا بیسم بایند کرده بودم که واسه همین خطای null reference میداد البته اگه تو جدول مشتریallow null را true میکردم خطای run time نمیداد اما در ازاش خطای دیگه ای اتفاق می افتاد اونم اینکه رشته ای خالی در جدولم ثبت میشد----> راه حلش هم این بود که من اشتباهی علاوه بر تکسته تکس باکسم ؛ تگ هم بایند کردم در نتیجه پاکش کردم درست شد.:لبخند:
2 - در فرم محصولات بعد از اینکه دکمه ثبت داده را میزدم فرمم بسته نمی شد و برنامم هنگ می کرد بعد از اینکه با کمک استاد چک کردیم فهمیدیم که چون واسه قیمت محصول ما int تعریف کردیم و چون واسه امتحانی رشته وارد کردیم string را میخواسته جای int بگذاره که نمی شده واسه همین هنگ میکرد----> توی proprieties همون تکس باکس قیمت رفتم و گزینه ی causesValidation را false کنین..اما قبل این همه کار میشه توی keyPress تکس فیمت کذ زیر را نوشت واسه اینکه کاربر تنها قادر باشه عدد وارد کنه
private void txt_gheymat_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled=(char.IsDigit(e.KeyChar)||char.IsControl (e.KeyChar))?false:true;
}
مرسی به مورد جالبی اشاره کردی. متاسفانه این bindingNavigator این ضعف رو داره که اول آیتم جاری رو پاک می کنه بعدا کد های شما اجرا می شه و حتی BindingSource هم بهتون کمک نمی کنه چون توی رویداد ListChanged تغییرات اعمال شده (یعنی آیتم پاک شده) بنابراین باز شما نمی تونی با کد جلوی پاک شدن رو بگیری !!!
یک راه ساده اینه که شما bindingnavigator رو انتخاب کرده و در پنجره Properties روی DeleteItem کلیک کرده و مقدار اونو پاک کنی این کار باعث می شه که فقط کدهای شما اجرا بشه ودر نهایت کدتون رو به شکل زیر تغییر بدین
if (bsCustomer==null)
return;
if (bsCustomer.Current==null)
return;
DialogResult Result = MessageBox.Show("رکورد مورد نظر حذف شود ؟", "حذف رکورد", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2);
if (Result == DialogResult.Yes)
{
bsCustomer.RemoveCurrent();
}
که البته راه کثیفی هست.
احتمالا یک BindingNavigator مناسب برای این حالت و همچنین با قابلیت ویرایش و لغو بنویسم
فکر کنم به روش قدیمی بریم بهتره یعنی از BindingSource و bindingnavigatorکلا استفاده نکنیم و تمامی کدها را با بهره گیری از EF خودمان بنویسیم ...
یک سئوال پیش امده برام که اگر ما بخواهیم یک جدول جدید را به model اضافه کنیم چه باید کرد .. آخه زمان ایجاد EF model ما فقط همان جدولهایکه از قبل در بانک تعریف شده اند را انتخاب و به مدل اضافه میکنیم ... حالا اگر جدول یا پروسیجر جدید ایجاد کرده باشیم در بانک باید چه کرد ؟؟؟
وقتی database رو تغییر بدی می تونی توسط EDM Designer مدل ها تو Update کنی.
BindingSource و BindingNavigator تعریف و کاربرد خودشونو دارن. اگه سر کلاسم بودی حتما سرت داد می زدم :عصبانی: امیدوارم ویدیو جدید که تا چند دقیقه دیگه می ذارم مشکلتو حل کنه. تا وقتی نصفه نیمه بخوای هر چیزی یاد بگیری یا در حدی که کارتو بخواد راه بندازه همینطوری می شه باید همه چیزو کنار بذاری
نه کنار نمیگذارم هرگز باید یاد بگیرمنقل قول:
باید همه چیزو کنار بذاری
منتظر ویدئو هستم
ویدیوی جدید رو توی تاپیک اصلی گذاشتم
https://barnamenevis.org/showthread.p...71#post1376271
سلام
من می خواهم این فیلم های آموزشی را دانلود کنم . اما نمیشه.
مشکل از کجاست؟
اگر امکانش هست در جایی دیگر...
تشکر
با تشکر از استاد gwbasic لطفا از بحث های جانبی ناراحت نشید . با این که من این روز ها به دلایلی وقتم خیلی کم شده ولی خداشاهده که اگه شده چند
دقیقه ای هم که شده می یام و صحبت های شما رو نگاه می کنم .
خدا قوت .
بحث های حاشیه ای همیشه هست استاد بزرگوار ... و من ا.. توفیق
آقا من یه سوال فنی داشتم، کار این "_" چیه؟؟؟ که قبل از بعضی متغییر ها موقع تعریفشون میزارن؟؟؟
معمولا" برنامه نویسان برای متغیرهای private میذارند
دلیلش هم اینه که با یک _ متغیرهایی که خودشون تعریف کردند رو می بینند و با سایر متغیرها و متدها و ... متمایزشون می کنند
خیلی داری زحمت می کشی برای آموزش به بقیه ولی من دوست داشتم که کمی روی طراحی سه لایه ، الگوهای طراحی، و این چیزها وقت بگذاری، واقعا نیاز خیلی از برنامه نویس ها هست، اکثر دوستان این مدل برنامه می نویسند. پروژه ای برای همین کار ایجاد کردم چندتا نکته کوچک هست اگر تمام شود بزودی اینجا قرار می دهم.
با سلامنقل قول:
آقا من یه سوال فنی داشتم، کار این "_" چیه؟؟؟ که قبل از بعضی متغییر ها موقع تعریفشون میزارن؟؟؟
در بالا درست اشاره شد و یکی از استاندارد های نام گزاری هست که من خیلی از جاها میبینم که استفاده میشه. ولی برای صرفا استفاده از پراپریتی ها نیست. این نوع نامگزاری رو برای اشیایی استفاده میکنن که به صورت سرتاسری بین یک کلاس تعریف میشن. حالا این اشیا نسب دادن میشن به یک پراپریتی یا اینکه به صورت مستقیم ما ازشون استفاده میکنیم
موفق باشید
سلام
من طراحی سه لایه ، الگوهای طراحی، و این چیزها رو بلد نیستم. شاید حق با شما باشه که اینا نیاز خیلی از برنامه نویس هاست، اما این تاپیک و مطالبی که آموزش داده میشه برای من و کسای دیگه که مثل من برنامه نویس مبتدی هستن اهمیت خاص خودشو داره. لطفا سطح مطالب رو خیلی بالا نبرید تا ما مبتدی ها هم متوجه بشیم.
آقای gwbasic به خاطر زحمتی که می کشید تشکر میکنم و امیدوارم آموزش ها ادامه داشته باشه! :)
توی تاپیک اصلی من فاز بندی های این پروژه رو مشخص کردم البته هیچ دلیلی وجود نداره طبق اون عمل بشه و می تونه این روند تغییر کنه.
من در فاز اول سعی می کنم که روش کدنویسی پشت فرم ها رو آموزش بدم که چطور موجودیت ها پشت فرم تعریف بشه و به کنترل های فرم ارتباط داده بشه و در نهایت منطق برنامه با کنترل های فرم بطور مستقیم گره نخوره. مخاطب این فاز هم قطعا افراد مبتدی و کم تجربه هستند.
در نتیجه در مورد چند لایه نویسی کمی صبر کنید تا این فاز تموم شود.
اما اینکه چطور چند لایه نویسی بر اساس EntityFramework پیاده سازی شود من فکر میکنم راه بهتر پیاده سازی بر اساس CodeFirst هست در نتیجه نیاز به آشنایی با این مفهوم در EF هست بنابراین یک سری مقدمات هست که باید آموزش داده بشه
البته مشتاقم نظر شما رو در این زمینه بدونم شاید راه ساده تری رو داشته باشید.
دوستانی که علاقمند به ادامه این آموزش هستند لطفا کمی همکاری کنند من واقعا نمی دونم این آموزشها مفید هستند یا نه و یا اینکه اگه روش آموزش ایراد داره پیشنهاد بدن.
آقای مدیر gwbasic برای من آموزشهایت خیلی خیلی مهم هستند همینجور که میدونید من از اول این تاپیک دارم با شما گام به گام میام جلو و اگر این تاپیک را ادامه ندید واقعا دلسرد میشم برای من مفیدن من هم دارم همراه شما میام که معماری 3 لایه برسم ... پروژه من باید تحت 3 لایه ایجاد بشه و هر چه زودتر به لایه ها و مفاهیم ان برسم برام بهتره از این رو هر وقت هم فرصت بکنم دارم پی دی اف خانم julia lerman را نیز مطالعه میکنم اما متاسفانه زبان انگلیسیم زیاد قوی نیست و هر خطش برای درکش نیاز به یکی، 2 ساعت وقت دارم :ناراحت: با این حال تصمیم با شماست ... اکثر پروژهای تا حالا من کار کردم نرم افزارهای مدیریتی بوده و تحت ویندوز و اس کیو ال بنابراین به روشها و کدهای بهینه برای برنامه نویسی پیشرفته نیاز دارم ... باز از زحمات شما ممنونم
سلام به همه ی دوستای خوبم
اول میخواستم یه توضیح مختصر راجب این خصوصیت ها بدم بهتون که امییدوارم مفید باشن :
نکته 2 : غیرفعال کردن دیتاگرید در زمان ویرایش پس از یکبار کلیلک. که برای من جالب بودنقل قول:
خصوصیات در اصل حالتی هستند که مکانیزمی انعطاف پذیر برای خواندن ، نوشتن یا محاسبه ی مقادیری از فیلدهای اختصاصی(private fields) ؛ هستند
این خصوصیت ها می توانند بعنوان اعضای دیتای عمومی مورد استفاده قرار بگیرند، اما درواقع اونها شامل متدهای خاصی بنام (accessors) هستند که باعث میشوند دیتاها براحتی فابل دسترسی باشند در زمانی که ما متدهای قابل انعطاف و امن تولید میکنیم.
این خوصیات به کلاس ما این توانایی را میدهد که مقادیر قابل تنظیم(set) و مقادیر گرفته شده (get) که بصورت خصوصی(private) در کلاس تعریف شدند در معرض تماشا قرار دهد و قابل دسترسی کند.
دستور (get) برای این است که ارزش ان مقدار را برگرداند و دستور (set) برای برای تنظیم مقدار جدید این خصوصیت تعریف میشود
این سطح دسترسی می تواند در سطوح مختلف تعریف شوند
کلمه کلیدی valueبرای این است که در دستور (set)مقداری برای ان اختصاص داده است.
خصوصیاتی که شامل دستور set نیستند , فقط خواندنی هستند.
(گت) یک متذ قابل دسترسی را در خصوصیت یا ایندکسر مت تعریف میکنه که مقدار value را برمیگردونه
class TimePeriod
{
private double _seconds;
public double Seconds
{
get { return _seconds; }
set { _seconds = value; }
}
}
(ست)برای تعیین مفدار قابل نمایش در ان خصوصیت و اعمال یک سری شرایط بر روی ان
public double Hours
{
get { return seconds / 3600; }
set { seconds = value * 3600; }
}
(ولیو)
ارزش کلمه کلیدی متنی در Set ارسال در تعریف خصوصیات معمولی مورد استفاده قرار می گیرد. این شبیه به یک پارامتر ورودی در یک روش است.
private string name;
// Override auto-implemented property with ordinary property
// to provide specialized accessor behavior.
public override string Name
{
get
{
return name;
}
set
{
if (value != String.Empty)
{
name = value;
}
else
{
name = "Unknown";
}
}
}
نکته 3 : متدهایی که برای فعال یا غیر فعال کردن یکسری از ابزارهای روی فرم ؛ به جای اینکه برنامه نویس در رویداد کلیک دکمه ها بخواهد هربار اینها را بنویسد تنها متد مربوطه را صدا بزند
نکته 4 : نوشتن یک شرط باحال برای اینکه حالت صحیح یا غلط را برگردونه که من اینو بلد نبودم
tsbEdit.Enable=tsbDelete.Enable=bsProduct.count>0;
که در اینجا اگر حالت اخری جواب صحیح برگردونه پس کلا True میشن در غیر اینصورت False
دوستان و استادادن عزیز واقعا ممنون..من با توجه به اینکه وقتم کمه و زیاد همحرفه ای نیستم که بتونم تو بحثاتون شکت کنم اما هرجور شده سعی میکنم هر روز به این تاپیک سر بزنم...خواستم تشکری کنم و همچنین یه سوال درمورد اینکه کسی کلا درمورد handle میتونه به من توضیح بده؟؟
کلا مفهومش چیه؟؟؟؟
یه سوال دیگه اینکه آیا توی پروژه های خیلی بزرگ هم از entity framework استفاده میکنند یا نه؟
کدوم handle اگه منظورتون handle فرم هست مطلب خاصی نیست وقتی فرمی در سیستم عامل نمایش داده می شه به اون فرم یک handle اختصاص داده می شه ولی ما هنگام کد نویسی معمولا نیاز به این نداریم که از handle استفاده کنیم. handle معمولا هنگام برنامه نویسی از طریق api استفاده می شه. در کل چیزی نیست که زیاد فکرتون رو مشغولش کنید.
در مورد EF باید بگم که بله حتما می شه در پروژه های بزرگ استفاده کرد. EF برای راحتی و ارتباط object Oreinted با پایگاه داده آمده.
سلام من تازه با این تاپیک آشنا شدم.همین که دیدم بحث طراحی سه لایه ، الگوهای طراحی و... اینا هست و مثل اینکه میخواد تازه شروع بشه خواستم نظرم و بگم.واقعا این مطالب خیلی تو نت کمیاب هستن.و کمتر کسایی نخصص دارن.
من با نظر شما موافق نیستم چون مطالب مبتدی هرجا که بخوایین پیدا میشه.اما این جور مطالب که سطحشون بالاست کمیابه
اگه میشه جناب gwbasic بحث و آموزش رو در این ضمینه ادامه بدین تابتنیم بیشتر استفاده کنیم.
موفق باشین
سلام
من برنامه رو طبق آموزش ها ساختم اما زمانیکه روی دکمه ی save کلیک برای بار اول اطلاعات رو ذخیره میکنه اما برای بار دوم خطا میده و از برنامه میاد بیرون.
برنامه رو گذاشتم
اگه امکانش هست منو راهنمایی کنید
ممنون
رمز فایل هم 123321
http://up7.iranblog.com/images/ak9xbuv9eyyu13puggg3.rar
اگه ویدیو اول رو بدقت دیده باشید من این مورد رو توضیح دادم. این مسئله باگ ویژوال استودیو هست. وقتی شما در Edm Designer روی یک Entity کلیک کرده و Id رو انتخاب کنید. در پنجره پراپرتی StoreGeneratedPattern = Identity قرار بدید هنگام تولید تگ این مورد لحاظ نمی شه که در سرویس پک یک این مسئله برطرف شده. برای حل اون هم همانطور که در ویدیو اشاره شد باید این مورد رو خودتون به صورت دستی اضافه کنید.
درضمن یادتون باشه که اگه Entity جدیدی اضافه کردین و یا update انجام دادین باز این مسئله پیش میاد که باید دوباره دستی این کارو انجام بدین البته جای نگرانی نیست چون همونطور که گفتم در سرویس پک یک ویژوال استودیو حل شده.
به همه دوستان پیشنهاد می کنم این آموزش ها رو چندین بار ببینین و حتما تموم کدها رو خودتون بنویسین تا کامل جا بیافته چون دوستانی که کداشونو به من نشون میدن (حالا اسمشونو نمی گم :چشمک:) باز هم به روش خودشون کد می نویسن
بابت دیر شدن آموزش های بعدی از همه عذر خواهی می کنم چون مطالب ویدیو بعدی که ساخت فرم سفارش هست خیلی زیاده و هنوز نتونستم به طور کامل جمع و جور کنم
سلام
من بعد از مدت ها اخر تونستم بیام اینجا ( اما خیلی سوت و کور شده که باید از این وضعیت در بیاد)
من یه سوال واسم پیش امده؟؟؟؟؟
کلا این Binding source کارش چی هست؟
واسه چی هست؟
ماهیتش چیه؟ یعنی چه جنسیه؟ یعنی کلاسه ؟ جدوله؟ ...؟ کلا یکی این رو میشه واسه من یاز کنه که دقیقا Binding source کارش چیه؟
دیگه کجاها به درد میخوره ؟
فواید و نواقصش چیه؟
اییییییی بابا چقدر سوال داشتم ؟؟؟؟؟ تراخدا یکی این کلاف پیچ در پیچ Binding source را واسم باز کنه ؟؟؟:متعجب::متفکر::لبخند::عصب نی++:
از bindingsource ایا می شود به روش معماری 3 لایه استفاده کرد ؟ آقای مدیر آموزش جدید ؟
در مورد BindingSource هم توی پروِژه به صورت ویدیویی آموزش دادم که چه کار می کنه و هم توی امضام لینک "آموزش Data Binding" رو گذاشتم که توی اون تاپیک کامل توضیح دادم که Data Binding چی هست و چطور از BindingSource برای Binding استفاده می کنیم. نمی دونم چرا سوال می کنید؟!
کلا binding ارتباطی رو بین کنترل و موجودیت برقرار می کنه. چرا نشه توی معماری چند لایه ازش استفاده کرد. شما موجودیتتون رو از لایه Data Accessمی گیرید و با استفاده از binding به کنترل های فرم وصل می کنید.
برای آموزش بعدی شاید حدود 40 50 ساعت فقط وقت صرف کد نویسی کردم. و تازه همین الان که دارم این پست رو می زنم تموم شده! در ادامه نیاز هست که معماری Entity Framework رو خوب بدونید حداقل اینکه Object Context رو خوب بشناسید و بدونید که چطوری چند OC داشته باشید و Entity ها رو بین اونها جابجا کنید. در ادامه تکنیک هایی که استفاده می شه بخصوص در معماری چند لایه خیلی قابل استفاده هستند. و دونستنشون مهم هست.
امیدوارم امشب بتونم ویدیو رو هم آماده کنم
در تاپيک اصلي آموزش ساخت فرم سفارش رو گذاشتم. اميدوارم با اين آموزش به ارزش Entity Framework پي ببريد که چطور مي شه با استفاده از آن به صورت شي گرا با Database ارتباط بر قرار کرد و وظيفه ذخيره تغييرات رو به عهده EF گذاشت. همچنين اميدوارم نحوه ارتباط برقرار کردن بين چند فرم رو ببينيد و استفاده کنيد.
پيشنهاد مي کنم اين آموزش رو چندين بار ببينيد و مهمتر از اين سعي کنيد با سليقه خودتون کدنويسي کنيد و فرم سفارش رو بسازيد تا بيشتر با EF آشنا بشين و با خطاهاي احتمالي مواجه بشين تا کارکردن با ObjectContext برایتان جا بیافتد!!!
ممنونم اقای مدیر بابت زحماتی که کشیدی به زودی کدهای خودم را میگذارم تا نظر بدین
این تاپیک را یک جوری همیشه در صفحه اول قرار دهید ، چون مشکل خیلی با خواندن این حل می شود
پیشنهاد خوبی هست. تاپیک اصلی آموزش رو اعلان کردم تا براحتی در دسترس باشه امیدوارم مورد استفاده قرار بگیره!
تا کسی خودش نخواد و تلاش نکنه مطمئنا پیشرفتی حاصل نمی شه. امیدوارم کسانیکه این آموزش ها رو دانلود می کنن دنبال آرشیو درست کردن نباشن که یه زمانی اگه وقت پیدا کردن ببینن. مطمئن باشن که اون وقت هیچ زمانی نمی رسه. پس بهتره در اولین فرصت شروع کنن و دست به کار بشن هرچی رو که یاد می گیرن بنویسن و تلاش کنن تا یاد بگیرن این مطالب حاصل سالها تجربس که در اختیار شما قرار می گیره چیزی نیست که توی کتابا بتونین به این سادگی دنبالش بگردین...
موفق باشین
سلام
آموزش سوم خیلی سخت بود و هم خیلی عالی خیلی چیزا فهمیدم و خیلی چیزا را یاد نگرفتم
کدها را مانند کدهای آقای مدیر سعی کردم بنویسم اما باز مشکل داشتم
در قسمت طراحی بانک اگر به اشتباه فیلدی را تعریف کرده و می خواهم تغییرات اعمال کنیم دوباره و ذخیره کنیم با پیغام ذخیره ای روبه رو می شویم که savetext داره حتما متوجه شدید کدام پیغامه اون را داخل sql server 2008 یک تیک داشت که بر میداشتی دیگه این پیغام نمیاد اما از داخل داخل ویژوال استودیو نمیدونم به چه طریق ؟
2. دومین مشکل من سر همین Attach و Detach خیلی سخته تا مفهوم درک کنم شاید به دلیل اینه که من از ساختار struct درک درستی ندارم همچنین این get و set همیشه استفاده میکنم اما هیچ موقعه نفهمیدم چی هستند :قهقهه:
بالاخره من این تاپیک را حسابی دنبال میکنم تا یاد بگیرم
کدهای خودم را گذاشتم و در فرم مشتری یک جستجو هم گذاشتم که از دستورات linq استفاده کرده ام به چند طریق جستجو با دستورات و نام خانوادگی مشتری
و اما فرم سفارش
1. دیتا گرید به bsorderdetails متصل کردم اما productName نیامد تو ستون های گرید؟
2. اخرش تو قسمت AddProductToCurrentOrderDetail به مشکل بر خوردم که نفهمیدم چه کنم
اینهم کدهای من : امیدوارم نظر بدهید و مشکلات من را توضیح بدهید
http://s2.picofile.com/file/7242996020/Store1.rar.html