Imports System.Windows.Forms Public Class frmEditHymnal Private mobjDetailHymnal As New clsHymnal Protected Overrides Sub LoadExistingItemsList() Dim lobjHymnal As clsHymnal Dim lcolHymnals As System.Collections.Generic.List(Of clsHymnal) SetUpExistingItemsHeaders() lcolHymnals = clsHymnal.GetAllHymnals Me.ExistingItemsListSuspendLayout() For Each lobjHymnal In lcolHymnals Me.ExistingObjectsListItems.Add(ConvertHymnalToListViewItem(lobjHymnal)) Next Me.ExistingItemsListResumeLayout() End Sub Private Sub SetUpExistingItemsHeaders() Me.ExistingObjectsListColumns.Add("Hymnal Name", 400, HorizontalAlignment.Left) Me.ExistingObjectsListColumns.Add("Hymnal Abbreviation", 150, HorizontalAlignment.Left) 'Me.ExistingObjectsListColumns.Add("Column3", 200, HorizontalAlignment.Left) 'Set up sorting rules Dim lobjBaseEditFormColumnSortRules(1) As clsGridColumnSortRule lobjBaseEditFormColumnSortRules(0) = New clsGridColumnSortRule(clsGridColumnSortRule.enumSortType.SortAsString) lobjBaseEditFormColumnSortRules(1) = New clsGridColumnSortRule(clsGridColumnSortRule.enumSortType.SortAsString) MyBaseEditFormColumnSortRules = lobjBaseEditFormColumnSortRules End Sub Protected Overrides Sub InitializeDetailControls() 'Load data to detail controls here at form load time txtHymnalName.MaxLength = MyGlobals.HYMNAL_NAME_SIZE txtHymnalAbbreviation.MaxLength = MyGlobals.HYMNAL_ABBREVIATION_SIZE End Sub Protected Overrides Sub SetFocusToFirstDetailControlForEdit() txtHymnalName.Focus() End Sub Protected Overrides Function DetailControlsHaveDifferentDataThanExistingData(ByVal lstvwExistingItem As System.Windows.Forms.ListViewItem) As Boolean Dim lobjSavedHymnal As clsHymnal lobjSavedHymnal = CType(lstvwExistingItem.Tag, clsHymnal) mobjDetailHymnal.HymnalName = txtHymnalName.Text mobjDetailHymnal.HymnalAbbreviation = txtHymnalAbbreviation.Text If lobjSavedHymnal.StateIsIdentical(mobjDetailHymnal) Then Return False Else Return True End If End Function Protected Overrides Function DetailControlsHaveSignificantData() As Boolean If txtHymnalName.Text.Trim.Length > 0 Then Return True End If If txtHymnalAbbreviation.Text.Trim.Length > 0 Then Return True End If Return False End Function Protected Overrides Sub EmptyOutDetailControls() txtHymnalName.Text = "" txtHymnalAbbreviation.Text = "" mobjDetailHymnal = New clsHymnal End Sub Protected Overrides Function LoadExistingDataToDetailControls(ByVal lstvwExistingItem As System.Windows.Forms.ListViewItem) As Boolean Dim lobjHymnal As clsHymnal Dim lblnReturnValue As Boolean = False lobjHymnal = CType(lstvwExistingItem.Tag, clsHymnal) txtHymnalName.Text = lobjHymnal.HymnalName mobjDetailHymnal = CType(lobjHymnal.Clone(), clsHymnal) Return True End Function Protected Overrides Function ConfirmOKToDeleteExistingItem(ByVal lstvwItemToDelete As System.Windows.Forms.ListViewItem) As Boolean Dim lobjHymnal As clsHymnal Dim lstrReferencedBy As String = "" lobjHymnal = CType(lstvwItemToDelete.Tag, clsHymnal) If Not lobjHymnal.OKToDelete(lstrReferencedBy) Then MessageBox.Show("Can't delete hymnal: " + lobjHymnal.HymnalName + ". Currently used by " + lstrReferencedBy + ".", "Unable to delete", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) Return False End If Dim ldrDialogResult As DialogResult = MessageBox.Show("Are you sure you want to delete hymnal: " + lobjHymnal.HymnalName + "?", "Delete confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) If ldrDialogResult = System.Windows.Forms.DialogResult.No Then Return False End If Return True End Function Protected Overrides Function DeleteExistingItem(ByVal lstvwItemToDelete As System.Windows.Forms.ListViewItem) As Boolean Dim lobjHymnal As clsHymnal lobjHymnal = CType(lstvwItemToDelete.Tag, clsHymnal) Return lobjHymnal.Delete() End Function Protected Overrides Function SaveNewItem() As Boolean Dim lstrErrorString As String = "" mobjDetailHymnal.HymnalName = txtHymnalName.Text mobjDetailHymnal.HymnalAbbreviation = txtHymnalAbbreviation.Text If Not mobjDetailHymnal.Validate(lstrErrorString) Then MessageBox.Show(lstrErrorString, "Edit Error", MessageBoxButtons.OK, MessageBoxIcon.Warning) Return False End If If Not mobjDetailHymnal.Save() Then Return False End If Me.ExistingObjectsListItems.Add(ConvertHymnalToListViewItem(mobjDetailHymnal)) Return True End Function Protected Overrides Sub UserRequestedToExit() Me.Close() End Sub Protected Overrides Sub EditOrAddStarting() CType(Me.ParentForm, frmMain).DisableMenus() End Sub Protected Overrides Sub EditOrAddCompleted() CType(Me.ParentForm, frmMain).EnableMenus() End Sub Private Function ConvertHymnalToListViewItem(ByVal lobjHymnal As clsHymnal) As ListViewItem Dim lobjItem As ListViewItem lobjItem = New ListViewItem(lobjHymnal.HymnalName) lobjItem.SubItems.Add(lobjHymnal.HymnalAbbreviation) 'lobjItem.SubItems.Add("Item1Col3") lobjItem.Tag = lobjHymnal Return lobjItem End Function Protected Overrides Function SaveNewDataForExistingItem(ByVal lstvwExistingItem As System.Windows.Forms.ListViewItem) As Boolean Dim lstrErrorString As String = "" mobjDetailHymnal.HymnalName = txtHymnalName.Text mobjDetailHymnal.HymnalAbbreviation = txtHymnalAbbreviation.Text If Not mobjDetailHymnal.Validate(lstrErrorString) Then MessageBox.Show(lstrErrorString, "Edit Error", MessageBoxButtons.OK, MessageBoxIcon.Warning) Return False End If If Not mobjDetailHymnal.Save() Then Return False End If Me.ExistingObjectsListItems.Remove(lstvwExistingItem) Me.ExistingObjectsListItems.Add(ConvertHymnalToListViewItem(mobjDetailHymnal)) Return True End Function Private Sub txtHymnalName_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtHymnalName.TextChanged MyBase.DetailDataHasChanged() End Sub Private Sub txtHymnalAbbreviation_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtHymnalAbbreviation.TextChanged MyBase.DetailDataHasChanged() End Sub End Class