در این نوشته می خواهیم یک پروژه بسیار ساده را برای انجام چهار کار CRUD (کوتاه شده CREATE – Read – Update – Delete) را  آموزش  دهیم که در برگیرنده Entity Framework و برنامه نویسی WinForms است. پروژه تنها شامل تک جدولی به نام Employee است، بنابراین در این پروژه درگیر ساخت رابطه میان جدول ها در Entity Framework  نمی شویم. مدل را بر پایه رویکرد Model First می سازیم& بنابراین نیاز است تا نوشته آن را بخوانید.

ایجاد مدل در رویکرد Model First به شیوه ویژوال

در این بخش نخست نیازمندی های پروژه را خواهیم گفت که در برگیرنده طراحی واسط گرافیکی و ساخت مدل به شیوه رویکرد Model First است. سپس در بخش دوم، چگونگی نوشتن کدهای سی شارپ برای انجام کارهای CRUD را خواهیم گفت که مفهوم تازه ای نیز در آن بخش آموزش داده شده است. در زیر آن چیزی که در این بخش انجام می دهیم، فهرست شده است.

  • طراحی واسط گرافیکی: که دارای چندین Label و TextBox برای ورودی داده ها، یک GridDataView برای نمایش سطرهای جدول و سه دگمه که یکی عملیات درج دادها و بروز رسانی آنها را انجام می دهد و دو دیگری، برای پاک کردن یک سطر از جدول به کار می رود. سه دیگری، کاربرد ساده ای دارد و تنها پنجره برنامه را می بنند.
  • طراحی مدل EDM: که تنها دارای یک جدول به نام Employee است.

ساخت واسط گرافیکی

شکل زیر ساختار واسط گرافیکی را نشان می دهد که در آن سه دگمه به نام های Save و Delete و Cancel نشان داده می شود. در نوشته بخش دوم نشان می دهیم که دگمه Save برای درج و همچنین بروز رسانی داده به کار می رود، دگمه Delete برای پاک کردن یک سطر و در پایان دگمه Cancel  TextBox پنجره برنامه به کار می رود. همچنین در شکل زیر نشان داده شده است که در واسط گرافیکی، چهار TextBox هست که نخستین نام، دومین نام خانوادگی، سومین نام شهر و چهارمین آدرس کارمند را دریافت می کند.

شکل زیر تنها یک نمونه از چگونگی پیکربندی هر کدام از مولفه های گرافیکی برنامه را نشان می دهد که شکل زیر برای TextBox دریافت آدرس کارمند است. هرگاه روی یکی از مولفه تک کلیک کنید، در پنجره Properties فهرست ویژگی های آن نشان داده می شود. ویژگی Name برای همه نام مولفه را مشخص می کند که سپس درون برنامه از آن برای دسترسی به مولفه کمک می گیریم. Text که در برخی از مولفه ها (مانند DataGridView) نیست، نوشته ای را مشخص می کند که در واسط گرافیکی نمایش داده می شود. انگیزه از شکل زیر این است که ویژگی Multiline برای TextBox را به مقدار true پیکربندی کنیم، زیرا نشانی مارمند بیش از بَند (خط) است.

ساخت پایگاه داده و مدل به شیوه Model First

همانگونه که گفتیم تنها یک جدول پنج ستونه داریم که ستون نخست آن EmployeeId و کلید اصلی است و به گونه خودکار، یکی یکی به مقدار آن افزوده می شود. چها ستون دیگر FirsName و LastName و City و Address نام دارند. در اینجا می خواهیم از پایگاه داده LocalDB کمک بگیریم. توجه کنید، پس از ساخت پایگاه داده، هرگز جدول را دستی نسازید، زیرا می خواهیم آن را به کمک EDM Designer  و رویکرد Model First بسازیم. از پیوندهای زیر کمک بگیرید، تا نخست پایگاه داده و سپس مدل را بسازید. شکل زیر، نمایی از شی گرافیکی مدل ساخته شده را نشان می دهد.

بررسی پروژه پس از ساخت مدل

شکل زیر همه فایل های را درون پروژه را نشان می دهد که از میان آنها، فایل Employee.cs، همان کلاس موجودیت است که کد آن نخست  در زیر نوشته شده است. فایل دیگر EmployeeContext.context.cs است که همان کلاس Context است که دومین کد زیر آن را نشان می دهد. بنابراین در عبارت using باید نمونه ای از آن را بسازیم و سپس به کمک این نمونه، به ویژگی <DbSet<Employee دسترسی داشته باشیم تا بتوانیم داده هایی را در جدول Employee درج، بروز رسانی و پاک کنیم یا همه آنها را نمایش دهیم.

چگونگی دریافت و نمایش داده های تک جدول Employee

در این نمونه، تنها یک جدول با پنج ستون EmployeeId و FirstName و LastName و City و Address داریم. ستون EmployeeId، کلید اصلی و خودکار یکی به مقدار پیشین آن افزوده می شود و نیازی نیست که دستی برای آن مقداری را وارد کنیم. برای هر کداک از چهار ستون دیگر، یک TextBox خواهیم داشت. برای نمایش سطرهای آنها، DataGridView را به کار می بریم، بنابراین با توجه به ویژگی های DataGridView برای ساختن پرس و جوهای UPDATE و DELETE، می توانیم به هر کدام از فیلدهای DataGridView دسترسی داشته باشیم. در نوشته پیش رو چگونگی کار و پیکربندی DataGridView را گفته ایم.

تابع ها ()ClearTextBosex

تابع ()ClearTextBoexes ساختاری بسیار ساده ولی کاربردی مهم دارد. انگیزه نخستین آن، پاک کردن متن همه TextBox ها است. زمانی که پس از اجرای برنامه، فرم (Form1) بارگذاری (Load) می شود، پس باید همه TextBox ها بدون (خالی) از نوشته باشند. همچنین، پس از آنکه داده های تازه ای در جدول درج شدند، پس باید دوباره متن های پیشین پاک شده، تا TextBox ها آماده دریافت داده تازه باشند. بنابراین چون می خواهیم تابع در بارگذاری فرم فراخوانی خودکار شود، پس باید این تابع در رویدا Form_Load قرار داده شود. کد زیر ساختار این تابع را نشان می دهد که بسیار ساده است. هر TextBox دارای یک ویژگی (Property) به نام Text است که می توانیم نوشته کنونی یک TextBox را به کمک آن بدست آوریم.

در سومین خط کد بالا، مقدار Text برای همه TextBox ها به مقدار رشته تهی تنظیم می شود، بنابراین با فراخوانی این متد نخست همه TextBox تهی (خالی) می شوند. توجه کنید ویزگی Text از کلاس TextBox به شیوه GET – Set ساخته شده است، بنابراین هم می توانیم مقدار کنونی آن را بدست آوریم و هم مانند خط سوم تابع ()ClearTextBoxes می توانیم مقداری را برای آن TextBox تنظیم کنیم.

توجه کنید در این پروژه تنها یک دگمه (شی changeRowBtn) داریم که هم درج و هم بروز کردن یک سطر را با آن انجام می دهیم. زمانی که پروژه باز می شود یا به گفته دیگر، هرگاه فرم بارگذاری می شود، پس نوشته عنوان دگمه ای که با شی changeRowBtn به آن اشاره می شود، برابر با Save است. بنابراین چون می خواهیم نوشته دگمه در بارگذاری فرم برابر با Save باشد، پس ویژگی Text از کلاس Button را برابر با Save می کنیم. توجه کنید هم TextBox و هم Button دارای ویژگی به نام Text هستند که نوشته کنونی را برگشت می دهند و یا اینکه می توانیم مقداری را برای نوشته کنونی، به ویژگی Text آنها انتساب دهیم. همچنین ما دگمه دیگری برای پاک کردن یک سطر داریم که با شی به نام deleteRowBtn به این دگمه دسترسی خواهیم داشت. به گونه پیش فرض این دگمه غیر فعال است، پس مقدار deleteRowBtn.Enabled آن برابر با false است.