Vložení materiálu provedeme opět transakčním zpracováním. Po klepnutí na tlačítko vložit se zobrazí popisek a pole pro zápis čísla materiálu . Pole se přednastaví prázdným řetězcem a nastaví se na ně fokus.
Kód vložíme do regiónu #Region "Editace zaznamu" - #Region "Ridici tlacitka":
Private Sub btnVlozit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnVlozit.Click
'zablokovat jiné možnosti, než změnu materiálu
Me.pnlNavig.Enabled = False
Me.pnlEdit.Enabled = False
Me.btnZavrit.Enabled = False
Me.grbRazeni.Enabled = False
Me.dgvTblMaterial.Enabled = False
Me.pnlVlozit.Visible = True
Me.txtVlozit.Text = "" 'vlozeni prazdneho retezce
Me.txtVlozit.Focus()
End Sub
Pro pole s číslem vkládaného materiálu připravíme obsluhu vlastnosti ztráta fokusu tohoto pole:
Kód vložíme do regiónu #Region "Editace zaznamu":
#Region "Vlozeni noveho zaznamu"
Private Sub txtVlozit_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtVlozit.LostFocus
Dim foundIndex As Integer
Dim VkladanyText As String = Me.txtVlozit.Text
foundIndex = TblMaterialBindingSource.Find("Cislo_Mat", VkladanyText)
If foundIndex >= 0 Then
MsgBox("Takový materiál již existuje", MsgBoxStyle.Exclamation, "Nelze vložit")
Me.pnlNavig.Enabled = True
Me.pnlEdit.Enabled = True
Me.btnZavrit.Enabled = True
Me.grbRazeni.Enabled = True
Me.dgvTblMaterial.Enabled = True
Else
'zablokovat jiné možnosti, než změnu materiálu
Me.pnlNavig.Enabled = False
Me.pnlEdit.Enabled = False
Me.btnZavrit.Enabled = False
Me.grbRazeni.Enabled = False
Me.dgvTblMaterial.Enabled = False
'zviditelnit potvrzovací skupinu
Me.pnlPotvrdit.Visible = True
'uvolnit pole pro editaci
Me.cmbMerna_Jed.Enabled = True
Me.txtNazev_Mat.Enabled = True
Me.txtMnoz_Poj.Enabled = True
Me.txtMnoz_Do_Pa.Enabled = True
Me.txtKoment.Enabled = True
'nastaveni pocatecnich hodnot pro nove zaznamy
With DsData.tblMaterial
.Cislo_MatColumn.DefaultValue = Me.txtVlozit.Text.Trim
.Merna_JedColumn.DefaultValue = "ks"
.Mnoz_Do_PaColumn.DefaultValue = 1
.Mnoz_PojColumn.DefaultValue = 1
.DatumColumn.DefaultValue = Date.Today
End With
Me.TblMaterialBindingSource.AddNew() 'vytvori se novy zaznam
Me.txtMnoz_Celk.Text = 0
Me.txtNazev_Mat.Focus()
End If
Me.pnlVlozit.Visible = False
End Sub
#End Region
Další zpracování je shodné se změnou záznamu (tlačítka Uložit a Vrátit).
Nadefinujeme kontrolu vstupních dat pro datová pole Mnoz_Poj a Mnoz_Do_Pa. Je možné zadávat pouze čísla >1. Ještě předtím musíme vložit objekt ErrorProvider .
Vložený kód je následující do regiónu #Region "Editace zaznamu":
#Region "Kontrola vstupnich dat"
Private Sub txtMnoz_Poj_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtMnoz_Poj.Validating
If Not KontrolaNaKladnyInteger(sender, 1, Integer.MaxValue) Then
e.Cancel = True
End If
End Sub
Private Sub txtMnoz_Do_Pa_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtMnoz_Do_Pa.Validating
If Not KontrolaNaKladnyInteger(sender, 1, Integer.MaxValue) Then
e.Cancel = True
End If
End Sub
Private Function KontrolaNaKladnyInteger(ByRef sender As Object, ByVal MinHodnota As Integer, ByVal MaxHodnota As Integer) As Boolean
Me.ErrorProvider1.SetError(sender, "")
Dim num As Integer
'If Not IsNumeric(Me.txtMnoz_Poj.Text) Then
If Not Integer.TryParse(sender.text, num) OrElse num < MinHodnota OrElse num > MaxHodnota Then
Me.ErrorProvider1.SetError(sender, "Musíte zadat celé číslo v rozsahu " & MinHodnota.ToString & " až " & MaxHodnota.ToString)
Me.pnlPotvrdit.Enabled = False
Return False
Else
Me.pnlPotvrdit.Enabled = True
Return True
End If
End Function
#End Region
Přidáme kontrolu na nové číslo materiálu (musí obsahovat 10 znaků) a název materiálu (musí být zadán) do regiónu #Region "Editace zaznamu" - #Region "Kontrola vstupnich dat":
Private Sub txtVlozit_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtVlozit.Validating
Me.ErrorProvider1.SetError(sender, "")
If sender.text.Length <> 10 Then
Me.ErrorProvider1.SetError(sender, "Číslo materiálu musí obsahovat 10 znaků")
e.Cancel = True
End If
End Sub
Private Sub txtNazev_Mat_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtNazev_Mat.Validating
Me.ErrorProvider1.SetError(sender, "")
If sender.text.Length = 0 Then
Me.ErrorProvider1.SetError(sender, "Název materiálu musí být zadán")
e.Cancel = True
End If
End Sub