Přichází čas oživit formulář frmMaterial. Otevřeme si formulář frmMaterial např. pomocí okna Solution Explorer. Všechny objekty, které náš formulář bude potřebovat, jsme na něj již vložili. Podíváme se, jaký programový kód již formulář obsahuje. Klikneme v Solution Explorer na ikonu View Code .
Na obr. můžeme vidět kód, který se automaticky vygeneroval při vkládání jednotlivých objektů. Událost TblMaterialBindingNavigatorSaveItem.Click zajišťuje uložení dat z formuláře do databáze. Událost Load formuláře zajišťuje načtení dat z databáze do datasetu.
Kód si rozdělíme do regionů pro zvýšení přehlednosti .
V události Load formuláře přidáme kód, který nastaví počáteční hodnoty nových záznamů.
#Region "Udalosti formulare"
Private Sub frmMaterial_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.Cursor = Cursors.WaitCursor
'TODO: This line of code loads data into the 'DsData.tblMaterial' table. You can move, or remove it, as needed.
Me.TblMaterialTableAdapter.Fill(Me.DsData.tblMaterial)
'nastaveni pocatecnich hodnot pro nove zaznamy
With DsData.tblMaterial
.Nazev_MatColumn.DefaultValue = "Název materiálu"
.Merna_JedColumn.DefaultValue = "ks"
.Mnoz_Do_PaColumn.DefaultValue = 1
.Mnoz_PojColumn.DefaultValue = 1
.DatumColumn.DefaultValue = Date.Today
End With
Me.Cursor = Cursors.Default
End Sub
#End Region
Událost TblMaterialBindingNavigatorSaveItem.Click upravíme tak, že ukládání bude fungovat pouze tehdy, pokud je možné vložená data úspěšně uložit .
#Region "TblMaterialBindingNavigator"
Private Sub TblMaterialBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TblMaterialBindingNavigatorSaveItem.Click
Me.Cursor = Cursors.WaitCursor
If Me.Validate() Then 'zadana data odpovidaji podminkam
Me.TblMaterialBindingSource.EndEdit()
Me.TableAdapterManager.UpdateAll(Me.DsData)
Else
Me.Cursor = Cursors.Default
MsgBox("Opravte vstupy", MsgBoxStyle.Critical + MsgBoxStyle.OkOnly, "Chyba")
End If
Me.Cursor = Cursors.Default
End Sub
#End Region
Poklepeme na tlačítko btnZavrit. Vytvoří se prázdná procedura události click. Dopíšeme následující kód .
#Region "Ridici tlacitka"
Private Sub btnZavrit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnZavrit.Click
If Not IsNothing(Me.DsData.GetChanges) Then 'Test, zdda jsem v datech udelali zmenu
If MsgBox("Neuložili jste data. Chcete je uložit?", MsgBoxStyle.YesNo + MsgBoxStyle.Question, "Uložit data?") = MsgBoxResult.Yes Then
Exit Sub 'preruseni procedury
End If
End If
'otevrit formular frmRidici
Me.Cursor = Cursors.WaitCursor
Dim frmRidici As New frmRidici
frmRidici.MdiParent = MyFrmHlavni
frmRidici.Show()
Me.Close() 'zavrit tento formular
Me.Cursor = Cursors.Default
End Sub
#End Region
Dalším krokem bude udělat kontroly vstupních dat. Kontrola se bude zajišťovat pomocí objektu dgvTblMaterial. Ke kontrolám standardně slouží v tomto typu objektu událost CellValidating. Proceduru pro tuto událost je možné např. vytvořit tak, jak je ukázáno na obr.
Událost bude obsahovat následující kód :
#Region "DataGridView"
Private Sub dgvTblMaterial_CellValidating(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles dgvTblMaterial.CellValidating
Dim newInteger As Integer 'pomocna promenna na test spravneho formatu (integer) zadane hodnoty
Dim newDate As Date 'pomocna promenna na test spravneho formatu (datum) zadane hodnoty
Me.dgvTblMaterial.Rows(e.RowIndex).ErrorText = "" 'nastavime pocatecni text chybove hlasky
Select Case Me.dgvTblMaterial.Columns(e.ColumnIndex).DataPropertyName
Case "Cislo_Mat"
If e.FormattedValue.ToString.Length <> 10 Then
Me.dgvTblMaterial.Rows(e.RowIndex).ErrorText = "Číslo materiálu musí obsahovat 10 znaků"
e.Cancel = True
End If
Case "Nazev_Mat"
If e.FormattedValue.ToString.Length = 0 Then
Me.dgvTblMaterial.Rows(e.RowIndex).ErrorText = "Název materiálu musí být zadán"
e.Cancel = True
End If
Case "Merna_Jed"
If e.FormattedValue.ToString.Length = 0 Then
Me.dgvTblMaterial.Rows(e.RowIndex).ErrorText = "Měrná jednottka musí být zadána"
e.Cancel = True
End If
Case "Mnoz_Poj", "Mnoz_Do_Pa"
If Not Integer.TryParse(e.FormattedValue.ToString(), newInteger) OrElse newInteger <= 0 Then
Me.dgvTblMaterial.Rows(e.RowIndex).ErrorText = "Množství musí být kladné"
e.Cancel = True
End If
Case "Datum"
If Not Date.TryParse(e.FormattedValue.ToString(), newDate) Then
Me.dgvTblMaterial.Rows(e.RowIndex).ErrorText = "Zadejte datum ve formátu dd.mm.rrrr"
e.Cancel = True
End If
End Select
End Sub
#End Region