Do formuláře doplníme zbývající prvky :
Do panelu vložíme skupinu příkazových tlačítek. Panel nazveme pnlEdit. Vlastnosti jednotlivých objektů:
Do panelu vložíme skupinu tlačítek. Panel nazveme pnlPotvrd. Vlastnosti jednotlivých objektů:
Na formulář umístíme panel, který bude obsahovat popisek a textové pole pro číslo zadávaného materiálu. Pro panel nastavíme vlastnost "viditelný" (visible) ve vlastnostech na false. To znamená, že tyto prvky normálně nebudou viditelné. Vlastnosti jednotlivých objektů:
V návrhu formuláře není místo pro komentář. Použijeme malý trik. Vložíme tlačítko, které bude zviditelňovat a zhasínat editační textové pole pro komentář. Vlastnosti jednotlivých objektů:
Private Sub btnKomentar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnKomentar.Click
Me.txtKoment.Visible = Not Me.txtKoment.Visible
End Sub
V titulku tlačítka budeme signalizovat malými písmeny, že komentář neexistuje a velkými, že existuje. To lze zařídit vložením kódu do obsluhy události změna řádky (PositionChanged) v objektu, který zpřístupňuje data jednotlivým objektům na formuláři (TblMaterialBindingSource) :
#Region "Zmena zaznamu"
Private Sub TblMaterialBindingSource_PositionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TblMaterialBindingSource.PositionChanged
Cursor.Current = Cursors.WaitCursor
If TblMaterialBindingSource.Current("Koment").ToString.Length > 0 Then
Me.btnKomentar.Text = "KOMENTÁŘ" 'existuje komentar
Else
Me.btnKomentar.Text = "Komentář" 'neexistuje komentar
End If
Cursor.Current = Cursors.Default
End Sub
#End Region
Dalším krokem bude spočítat celkové množství materiálu z jednotlivých palet. K výpočtu použijeme SQL příkaz s agregační funkcí SUM. Výpočet se bude spouštět v události TblMaterialBindingSource.PositionChanged. Výsledná procedura bude vypadat následovně:
#Region "Zmena zaznamu"
Private Sub TblMaterialBindingSource_PositionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TblMaterialBindingSource.PositionChanged
Cursor.Current = Cursors.WaitCursor
If TblMaterialBindingSource.Current("Koment").ToString.Length > 0 Then
Me.btnKomentar.Text = "KOMENTÁŘ"
Else
Me.btnKomentar.Text = "Komentář"
End If
'vypocitame celkove mnozstvi pomoci agregacni funkce
Dim strSQL As String
strSQL = "SELECT SUM(Mnoz_pa) AS CelkoveMnozstvi FROM tblPalety WHERE Cislo_Mat = '" & _
Me.TblMaterialBindingSource.Current("Cislo_Mat") & "' GROUP BY Cislo_Mat"
'nadefinujeme sluzbu pro pristup k databazi
Dim builder As New System.Data.OleDb.OleDbConnectionStringBuilder
builder.Provider = "Microsoft.ACE.OLEDB.12.0" 'Pristup do Access typu accdb
builder.DataSource = "|DataDirectory|\Data\Data.accdb"
'inicializace objektu spojení na databázi
Dim oledbcon As New OleDb.OleDbConnection
oledbcon.ConnectionString = builder.ConnectionString
oledbcon.Open() 'pomocí dat z ConnectionStringu spojení otevřeme
Dim cmd As New OleDb.OleDbCommand(strSQL, oledbcon) 'deklarace prikazu nad databazi pomoci SQL
Dim dataReader As OleDb.OleDbDataReader = cmd.ExecuteReader() 'spuštění dotazu a vytvoření objektu na čtení řádků
dataReader.Read() 'nacteme data z databaze s definovanym SQL prikazem
'ziskame celkove mnozstvi
Dim CelkoveMnozstvi As Integer
If dataReader.HasRows Then
'existují palety vybraneho materialu
CelkoveMnozstvi = dataReader("CelkoveMnozstvi")
Else
'neexistují palety vybraneho materialu
CelkoveMnozstvi = 0
End If
Me.txtMnoz_Celk.Text = CelkoveMnozstvi
dataReader.Close() '// nejdříve uzavřeme aktuální dotaz
oledbcon.Close() '// a pak i spojení
Cursor.Current = Cursors.Default
End Sub
#End Region