روی tblNews کلیک کرده آنرا بکشید و روی فرم رها کنید. آنگاه ظاهر فرم و چیدمان کنترلها را تنظیم کنید و دو دکمه ذخیره و لغو برابر با شکل در فرم ایجاد کنید:
کد رویداد دو دکمه را اینگونه بنویسید:
private void btnCancel_Click(object sender, EventArgs e) { this.Close(); } private void btnSave_Click(object sender, EventArgs e) { this.DialogResult = System.Windows.Forms.DialogResult.OK; }
در پایین فرم روی tblNewsBindingSource کلیک کنید و از قسمت Properties ویژگی Modifiers آنرا برابر با Public کنید.
روی Combobox کلیک کنید، سپس ویژگی DataBinding -> Text آنرا خالی کنید. سپس روی فلش بالای Combobox دسته خبر کلیک کنید و تنظیمات آنرا مانند شکل زیر انجام دهید.
برای پرشدن آن کد زیر را در رویداد Load فرم اینگونه بنویسید:
private void frmAddEditNews_Load(object sender, EventArgs e) { MyNewsService.MyNewsServiceClient MyNews = new MyNewsService.MyNewsServiceClient(); tblCategoryIdComboBox.DataSource = MyNews.GetAllCategory(); }
به فرم اصلی بازگردید و برای رویداد دکمهی ویرایش چنین بنویسید:
private void btnEdit_Click(object sender, EventArgs e) { if (tblNewsDataGridView.CurrentRow == null) { MessageBox.Show("سطری برای ویرایش انتخاب کنید"); } else { //tblNews news = tblNewsDataGridView.CurrentRow.DataBoundItem as tblNews; tblNews news = MyNews.GetNews(Convert.ToInt32(tblNewsDataGridView.CurrentRow.Cells["tblNewsId"].Value)); frmAddEditNews frmAdd = new frmAddEditNews(); frmAdd.tblNewsBindingSource.DataSource = news; if (frmAdd.ShowDialog() == DialogResult.OK) { MyNews.EditNews(news); tblNewsBindingSource.DataSource = MyNews.GetAllNews().Select(p => new { p.tblNewsId, p.tblCategory.CatName, p.Title, p.Description, RegDate = MiladiToShamsi(p.RegDate) }); } } }
در صورتی که متد GetAllNews را به صورت ساده به ویژگی DataSource دیتاگرید نسبت داده بودیم میتوانستید از کد زیر برای مقداردهی به متغیر news بهره ببریم. ولی در حال حاضر این خط کد پیغام خطا میدهد. البته راههای دیگری برای حل این مشکل وجود دارد که در این درس قصد پرداختن به آنرا ندارم.
tblNews news = tblNewsDataGridView.CurrentRow.DataBoundItem as tblNews;
کد مربوط به رویداد دکمهی افزودن و حذف را نیز به صورت زیر بنویسید:
private void btnAdd_Click(object sender, EventArgs e) { tblNews news = new tblNews(); frmAddEditNews frmAdd = new frmAddEditNews(); frmAdd.tblNewsBindingSource.DataSource = news; if (frmAdd.ShowDialog() == DialogResult.OK) { MyNews.AddNews(news); tblNewsBindingSource.DataSource = MyNews.GetAllNews().Select(p => new { p.tblNewsId, p.tblCategory.CatName, p.Title, p.Description, RegDate = MiladiToShamsi(p.RegDate) }); } } private void btnRemove_Click(object sender, EventArgs e) { if (MessageBox.Show("آیا با حذف این سطر اطمینان دارید؟","هشدار",MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes) { MyNews.DeleteNews(Convert.ToInt32(tblNewsDataGridView.CurrentRow.Cells["tblNewsId"].Value)); tblNewsBindingSource.DataSource = MyNews.GetAllNews().Select(p => new { p.tblNewsId, p.tblCategory.CatName, p.Title, p.Description, RegDate = MiladiToShamsi(p.RegDate) }); } }
برنامه را اجرا کنید. کار ما کم و بیش به پایان رسیده است. شما یک پروژهی ویندوز ساده با استفاده از WCF ای که از Entity Framework برای اتصال به پایگاه داده بهره میبرد؛ ایجاد کردید. WCF بسیار گستردهتر از این است و در اینجا تنها به بخشی از آن پرداختیم. احتمالاً در صورت استقبال خوانندگان در آینده دربارهی تنظیمات ریز WCF برای امنیت، سرعت، محدودیت و استفاده در محیطهای مختلف خواهم نوشت.
شاد و پیروز باشید.