Continuemos con la tercera y última parte del tutorial. Ahora implementaremos las funciones de agregar, editar y eliminar.
Tutorial
PetView.cs
public partial class PetView : Form, IPetView { //Fields private string message; private bool isSuccessful; private bool isEdit; //Constructor public PetView() { InitializeComponent(); AssociateAndRaiseViewEvents(); tabControl1.TabPages.Remove(tabPagePetDetail); btnClose.Click += delegate { this.Close(); }; } private void AssociateAndRaiseViewEvents() { //Search btnSearch.Click += delegate { SearchEvent?.Invoke(this, EventArgs.Empty); }; txtSearch.KeyDown += (s, e) => { if (e.KeyCode == Keys.Enter) SearchEvent?.Invoke(this, EventArgs.Empty); }; //Add new btnAddNew.Click += delegate { AddNewEvent?.Invoke(this, EventArgs.Empty); tabControl1.TabPages.Remove(tabPagePetList); tabControl1.TabPages.Add(tabPagePetDetail); tabPagePetDetail.Text = "Add new pet"; }; //Edit btnEdit.Click += delegate { EditEvent?.Invoke(this, EventArgs.Empty); tabControl1.TabPages.Remove(tabPagePetList); tabControl1.TabPages.Add(tabPagePetDetail); tabPagePetDetail.Text = "Edit pet"; }; //Save changes btnSave.Click += delegate { SaveEvent?.Invoke(this, EventArgs.Empty); if (isSuccessful) { tabControl1.TabPages.Remove(tabPagePetDetail); tabControl1.TabPages.Add(tabPagePetList); } MessageBox.Show(Message); }; //Cancel btnCancel.Click += delegate { CancelEvent?.Invoke(this, EventArgs.Empty); tabControl1.TabPages.Remove(tabPagePetDetail); tabControl1.TabPages.Add(tabPagePetList); }; //Delete btnDelete.Click += delegate { var result = MessageBox.Show("Are you sure you want to delete the selected pet?", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); if (result == DialogResult.Yes) { DeleteEvent?.Invoke(this, EventArgs.Empty); MessageBox.Show(Message); } }; }
PetPresenter.cs
public class PetPresenter { //Fields private IPetView view; private IPetRepository repository; private BindingSource petsBindingSource; private IEnumerable<PetModel> petList; //Constructor public PetPresenter(IPetView view, IPetRepository repository) { this.petsBindingSource = new BindingSource(); this.view = view; this.repository = repository; //Subscribe event handler methods to view events this.view.SearchEvent += SearchPet; this.view.AddNewEvent += AddNewPet; this.view.EditEvent += LoadSelectedPetToEdit; this.view.DeleteEvent += DeleteSelectedPet; this.view.SaveEvent += SavePet; this.view.CancelEvent += CancelAction; //Set pets bindind source this.view.SetPetListBindingSource(petsBindingSource); //Load pet list view LoadAllPetList(); //Show view this.view.Show(); } //Methods private void LoadAllPetList() { petList = repository.GetAll(); petsBindingSource.DataSource = petList;//Set data source. } private void SearchPet(object sender, EventArgs e) { bool emptyValue = string.IsNullOrWhiteSpace(this.view.SearchValue); if (emptyValue == false) petList = repository.GetByValue(this.view.SearchValue); else petList = repository.GetAll(); petsBindingSource.DataSource = petList; } private void AddNewPet(object sender, EventArgs e) { view.IsEdit = false; } private void LoadSelectedPetToEdit(object sender, EventArgs e) { var pet = (PetModel)petsBindingSource.Current; view.PetId = pet.Id.ToString(); view.PetName = pet.Name; view.PetType = pet.Type; view.PetColour = pet.Colour; view.IsEdit = true; } private void SavePet(object sender, EventArgs e) { var model = new PetModel(); model.Id = Convert.ToInt32(view.PetId); model.Name = view.PetName; model.Type = view.PetType; model.Colour = view.PetColour; try { new Common.ModelDataValidation().Validate(model); if(view.IsEdit)//Edit model { repository.Edit(model); view.Message = "Pet edited successfuly"; } else //Add new model { repository.Add(model); view.Message = "Pet added sucessfully"; } view.IsSuccessful = true; LoadAllPetList(); CleanviewFields(); } catch (Exception ex) { view.IsSuccessful = false; view.Message = ex.Message; } } private void CleanviewFields() { view.PetId = "0"; view.PetName = ""; view.PetType = ""; view.PetColour = ""; } private void CancelAction(object sender, EventArgs e) { CleanviewFields(); } private void DeleteSelectedPet(object sender, EventArgs e) { try { var pet = (PetModel)petsBindingSource.Current; repository.Delete(pet.Id); view.IsSuccessful = true; view.Message = "Pet deleted successfully"; LoadAllPetList(); } catch (Exception ex) { view.IsSuccessful = false; view.Message = "An error ocurred, could not delete pet"; } } }
ModelDataValidations.cs
public class ModelDataValidation { public void Validate(object model) { string errorMessage = ""; List<ValidationResult> results = new List<ValidationResult>(); ValidationContext context = new ValidationContext(model); bool isValid = Validator.TryValidateObject(model,context,results,true); if(isValid==false) { foreach (var item in results) errorMessage += "- " + item.ErrorMessage + "\n"; throw new Exception(errorMessage); } } }
PetRepository.cs
public class PetRepository : BaseRepository, IPetRepository { //Constructor public PetRepository(string connectionString) { this.connectionString = connectionString; } //Methods public void Add(PetModel petModel) { using (var connection = new SqlConnection(connectionString)) using (var command = new SqlCommand()) { connection.Open(); command.Connection = connection; command.CommandText = "insert into Pet values (@name, @type, @colour)"; command.Parameters.Add("@name", SqlDbType.NVarChar).Value = petModel.Name; command.Parameters.Add("@type", SqlDbType.NVarChar).Value = petModel.Type; command.Parameters.Add("@colour", SqlDbType.NVarChar).Value = petModel.Colour; command.ExecuteNonQuery(); } } public void Delete(int id) { using (var connection = new SqlConnection(connectionString)) using (var command = new SqlCommand()) { connection.Open(); command.Connection = connection; command.CommandText = "delete from Pet where Pet_Id=@id"; command.Parameters.Add("@id", SqlDbType.Int).Value = id; command.ExecuteNonQuery(); } } public void Edit(PetModel petModel) { using (var connection = new SqlConnection(connectionString)) using (var command = new SqlCommand()) { connection.Open(); command.Connection = connection; command.CommandText = @"update Pet set Pet_Name=@name,Pet_Type= @type,Pet_Colour= @colour where Pet_Id=@id"; command.Parameters.Add("@name", SqlDbType.NVarChar).Value = petModel.Name; command.Parameters.Add("@type", SqlDbType.NVarChar).Value = petModel.Type; command.Parameters.Add("@colour", SqlDbType.NVarChar).Value = petModel.Colour; command.Parameters.Add("@id", SqlDbType.Int).Value = petModel.Id; command.ExecuteNonQuery(); } }
Descargas
Video Tutoriales
English
Part 1, 2 and 3
Español
Parte 1, 2 y 3