2010 هستش ولی سرویس پک یک نیست
حق با شماست، وقتی سیو رو میزنم بعضی وقتا یه ارروری میده! پس این اررور به خاطر همین مسئله پیش میاد؟! مرسی از توضیحاتتون
2010 هستش ولی سرویس پک یک نیست
حق با شماست، وقتی سیو رو میزنم بعضی وقتا یه ارروری میده! پس این اررور به خاطر همین مسئله پیش میاد؟! مرسی از توضیحاتتون
با تشکر از استاد ( به حق استاد)
خدا خیرت بده . من فیلم ویدیویی رو تازه دیدم . بسیار عالی بود. ان شاا... که ادامه داشته باشه و کم نیارین.
سلام
بچه ها اماده باشین واسه قسمت دوم
اگه فیلم اموزشی را دیده باشین پس تا حالا حتما چیزایی از entity یاد گرفتین
پس یک نمونه بسازین و اماده بشین واسه فاز دوم
تا فردا جزئیات فاز دوم اماده میشه
مرحله بعدی باید حتما از entity استفاده کنین.پس از الان سرچ کنین تا بهترین پروژه را درست کنین(شاید توی پروژه اصلی کد شما قرار بگیره)
از امشب مرحله 2 شروع شده
نکات مهم مرحله 1 پروژه :
__________________________________________________ ____________
1 - نوع داده ای Uniqueidentifier بود که فکر کنم کسانی بودن که مثل من باهاش اشنا نبودن:
نوع داده ای 16 بیتی هست که بصورت باینری ذخیره میشه با نام globally unique identifiers (GUIDs) که یک عدد دودویی منحصر به فرد هست و هیچ کامپوتر دیگری در جهان وجود ندارد که یک GUID مشترک با کامپوتر دیگر را تولید کند. استفاده ی اصلی از GUID برای تولید یک شناسه ی منحصر به فرد در یک سیستم شبکه بزرگ که شامل چندین سایت است ,کاربرد دارد.
یک مقدار GUID برای ستون uniqueidentifier است که معمولا توسط یکی از روش های زیر به دست می اید :
* In a Transact-SQL statement, batch, or script by calling the NEWID function.
*در کد برنامه با فراخوانی تابع API ویا متدی که GUIDمی گرداند
این متغیر به 2 فرمت زیر به وجود می اید :
1 - رشته ای حاوی کاراکتر و عدد:Character string format: '6F9619FF-8B86-D011-B42D-00C04FC964FF'
2 - فرمت دودویی : 0xff19966f868b11d0b42d00c04fc964ff
همان طور که در فیلم دیدین مفدارRowGuidرا برابرYes زذیم تا مقدار پیش فرض برای Default value or binding بشه NewGuid() تا هربار یک مقدار منحصربفرد در دنیا در فیلد جدول شما بیا
(منبع این مطلب)
.
نکته 2 - چرا stored generate patern را identity گذاشتیم؟ چون ایدی ما بصورت اتوماتیک generate میشه و چون میخواهیم بفهمیم اون ایدی از سمت دیتابیس چی بوده پس این مقدار رو توی حالت مدل که توی ویژال استدیو هستش را identity میزاریم و توی فایل xml هم تغییرش میدیم
نکته 3 - alt + shft + f10 که برای ساختن یک متد بود : یعنی مثلا اگه میخواهین یک متد بسازین فقط اسمش با ارگومنت هاش را بنویسید و این دکمه ها را بزنین تا اتوماتیک دکمه ساخته بشه
قفل مخفی تلگرام، واتس اپ و همه برنامه ها - قفل حرفه ای برای دستگاه اندرویدی شما - با امکان مخفی شدن و جلوگیری از Unisntall شدن
--آموزش ایجاد برنامه های چند زبانه در WPF
-BeRMOoDA File Encrypter-open source-using WPF, C# and MVVM Pattern
-نمونه برنامه ساده و کامل با الگوی MVVM برای کار با دیتابیس با استفاده از Entity Framework در WPF
-WPFMessageBox فارسی/انگلیسی - با قابلیت تغییر Skin
قسمت دوم ویدیو مربوط به ساخت فرم Customer در تاپیک اصلی قرار داده شد لطقا به تاپیک اصلی که در پست اول اشاره شده مراجعه کنید.
این پست حذف خواهد شد
یعنی اینکه اول اسم متدی که میخواهی تعریف کنی را بنویس
بعدش براش پرانتز بزار و اگه متدت ارگومان ورودی داره براش توی پرانتز اونارو بنویس
بعدش سمی کولن بزن
چون تابعت تعریف نشده هستش زیر یه خط قرمز میکشه خود VS که بهت بگه این متد در کدت موجود نیست حالا 3 راه برای درست کردن متدت هست
1 - نوع( ش ز ) اینکه با ماوس روش وایسی تا مستطیل ابی کوچولو بیاد زیر اون خط قرمزه بعد با ماوس برو روش یه مربع باز میشه روش کلیک کن و اولین خطش رو بزن مثل زیر :
Untitled.png
2- راهی که باید اون کلیدها رو از صفحه کلید بزنی
3- متد را دستی بسازalt + shft + f10 که برای ساختن یک متد بود
آخرین ویرایش به وسیله haniyehghassami : جمعه 04 آذر 1390 در 17:28 عصر
یک مقدار هم در مورد کانکشن استرینگ توضیح بدید اینکه من همیشه فایل را در پوشه 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
آخرین ویرایش به وسیله shahrzad87 : چهارشنبه 09 آذر 1390 در 23:51 عصر
سلام
یه چیز باحال :
عیب های این برنامه را هر کی تونست پیدا کنه جایزه داره :
منهم مشکل دارم نمیدونم چرا اینجوری میشه بصورت فیلم گذاشتم یکبار خوبه مشکلی ایجاد نمیشه یعنی اطلاعات نمیپره یکبار هم که اجرا میکنی میبینی خالیه بانک ؟؟
این خود برنامه :
http://s2.picofile.com/file/7198115371/Store1.rar.html
اینم فیلم :
http://s1.picofile.com/file/71981523...itled.swf.html
بخشید اگر یک مقدار لهجه داره داخل فیلم :
آخرین ویرایش به وسیله noroozifar : سه شنبه 08 آذر 1390 در 19:00 عصر
ما هر چی اینجا منتظر شدیم تا آموزش جدید بیاد کسی نیامد و جواب سئوالات ما را هم ندادند به خاطر همین اینبار با عکس میگذارم تا ببینم کسی جواب میده یا نه ؟؟؟
بیین این نمای اول solutoin explorer
بقیه عکس ها را برای اینکه حجم تاپیک بالا نره فقط لینک میگذارم
من می خواهم حالتی را ایجاد کنم که دیتا بیس به بانک attach بشه امدم در فولدر data ازadd>new>existing item فایل storedb.mdf را اضافه کردم بعد امدم از قسمت models یک مدل جدید ایجاد کردم و باتوجه به دیتابیس کانکش و جدولها را انتخاب کردم برنامه اجرا میشه داده ها اضافه می شوند به جدول اما نمیدونم به محض اینکه من در کد برنامه تغییری را ایجاد کردم و برنامه را اجرا کردم مقادیر قبلی یعنی رکورد های قبلی که به بانک اضافه کردم نیستند از بین میرند
الان چند شبه دارم پیگیری میکنم هر جا سر میزنم تا مشکل را حل کنم نمیشه علت اینکار هم به این دلیله اگر پروژه را برروی سیستم دیگری انتقال دادم یا یک پروژه نصب ایجاد کردم دیگه مشکل اینکه اول برم بانک را به اس کیو ال attach کنم نداشته باشم خودش اینکارو انجام بده
این مرحله اخر بعد از اینکه بانک و مدل را به پروژه اضافه کردم :
این هم محتویات داخل 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 دارین این اتفاق نمی افته. امیدوارم متوجه شده باشین
در مورد کدتون هم بعدا توضیح می دم
آخرین ویرایش به وسیله gwbasic : پنج شنبه 10 آذر 1390 در 12:27 عصر
با تشکر از شما
بله من به این موضوع امروز قبل از پاسخ شما پی بردم چه اتفاقی رخ میدهد و برای اینکه این مشکل را در محیط برنامه نویسی حل کنم به قسمت 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 تعریف و کاربرد خودشونو دارن. اگه سر کلاسم بودی حتما سرت داد می زدم امیدوارم ویدیو جدید که تا چند دقیقه دیگه می ذارم مشکلتو حل کنه. تا وقتی نصفه نیمه بخوای هر چیزی یاد بگیری یا در حدی که کارتو بخواد راه بندازه همینطوری می شه باید همه چیزو کنار بذاری
نه کنار نمیگذارم هرگز باید یاد بگیرمباید همه چیزو کنار بذاری
منتظر ویدئو هستم
آخرین ویرایش به وسیله noroozifar : چهارشنبه 16 آذر 1390 در 12:30 عصر
ویدیوی جدید رو توی تاپیک اصلی گذاشتم
https://barnamenevis.org/showthread.p...71#post1376271
سلام
من می خواهم این فیلم های آموزشی را دانلود کنم . اما نمیشه.
مشکل از کجاست؟
اگر امکانش هست در جایی دیگر...
تشکر
با تشکر از استاد gwbasic لطفا از بحث های جانبی ناراحت نشید . با این که من این روز ها به دلایلی وقتم خیلی کم شده ولی خداشاهده که اگه شده چند
دقیقه ای هم که شده می یام و صحبت های شما رو نگاه می کنم .
خدا قوت .
بحث های حاشیه ای همیشه هست استاد بزرگوار ... و من ا.. توفیق
آقا من یه سوال فنی داشتم، کار این "_" چیه؟؟؟ که قبل از بعضی متغییر ها موقع تعریفشون میزارن؟؟؟
معمولا" برنامه نویسان برای متغیرهای private میذارند
دلیلش هم اینه که با یک _ متغیرهایی که خودشون تعریف کردند رو می بینند و با سایر متغیرها و متدها و ... متمایزشون می کنند
خیلی داری زحمت می کشی برای آموزش به بقیه ولی من دوست داشتم که کمی روی طراحی سه لایه ، الگوهای طراحی، و این چیزها وقت بگذاری، واقعا نیاز خیلی از برنامه نویس ها هست، اکثر دوستان این مدل برنامه می نویسند. پروژه ای برای همین کار ایجاد کردم چندتا نکته کوچک هست اگر تمام شود بزودی اینجا قرار می دهم.