Přidáme tlačítko btnZavrit s obsluhou, že při klepnutí se bude volat řídící formulář . Tlačítko bude mít následující vlastnosti:
#Region "Navigace"
#Region "Ridici tlacitka"
Private Sub btnZavrit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnZavrit.Click
'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
#End Region
U formuláře nastavíme:
Výsledný formulář je zobrazen na obr. .
Na formulář přidáme navigační tlačítka. Tlačítka umístíme do panelu . Vlastnosti jednotlivých objektů:
Programový kód tlačítek btnPrvni a btnPosledni je následující (#Region "Ridici tlacitka") :
Private Sub btnPrvni_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrvni.Click
'najit prvni zaznam
Me.TblMaterialBindingSource.MoveFirst()
Me.dgvTblMaterial.Focus()
End Sub
Private Sub btnPosledni_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPosledni.Click
'najit posledni zaznam
Me.TblMaterialBindingSource.MoveLast()
Me.dgvTblMaterial.Focus()
End Sub
Dále připravíme obsluhu tlačítka Najít. Na formulář umístíme panel, který bude obsahovat popisek a textové pole pro klíč který se má hledat . Pro panel nastavíme vlastnost "viditelný" (visible) ve vlastnostech na false. To znamená, že tyto prvky normálně nebudou viditelné. Vlastnosti jednotlivých objektů:
Při klepnutí na tlačítko najít se panel s oběma prvky zviditelní a fokus se nastaví na pole, kam se má zapsat vyhledávací klíč. Navigační tlačítka, tlačítko Konec a tlačítka řazení se znepřístupní .
#Region "Hledani"
Private Sub btnNajit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNajit.Click
'aktivace tlacitek
Me.pnlNavig.Enabled = False
Me.pnlEdit.Enabled = False
Me.btnZavrit.Enabled = False
Me.grbRazeni.Enabled = False
'zviditelneni zadavaciho pole
Me.pnlNajit.Visible = True
Me.txtNajit.Text = ""
Me.txtNajit.Focus()
End Sub
#End Region
Nyní musíme obsloužit situaci, že je vyplněn vyhledávací klíč. Vyhledávat se bude podle klíče, na které je nastaveno řazení. K dispozici máme dvě události:
Private Sub txtNajit_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtNajit.LostFocus
'aktivace tlacitek
Me.pnlNavig.Enabled = True
Me.pnlEdit.Enabled = True
Me.btnZavrit.Enabled = True
Me.grbRazeni.Enabled = True
Dim foundIndex As Integer 'cislo radku odpovidajici kriteriu
If rdbRaditCislaMat.Checked Then
'foundIndex = TblMaterialBindingSource.Find("Cislo_Mat", Me.txtNajit.Text) 'presne hledani
foundIndex = SearchRows(TblMaterialBindingSource, "Cislo_Mat", Me.txtNajit.Text)
ElseIf rdbRaditNazevMat.Checked Then
'foundIndex = TblMaterialBindingSource.Find("Nazev_Mat", Me.txtNajit.Text)
foundIndex = SearchRows(TblMaterialBindingSource, "Nazev_Mat", Me.txtNajit.Text)
End If
If foundIndex > -1 Then
TblMaterialBindingSource.Position = foundIndex
End If
'zviditelneni zadavaciho pole
Me.pnlNajit.Visible = False
Me.txtNajit.Text = ""
End Sub
Funkce SearchRows vyhledá číslo řádky odpovídající kritériu zadaném v textboxu txtNajit (1. parametr - tabulka, ve které hledáme; 2. parametr - sloupec, ve kterém hledáme; 3 parametr - hledany text). Tuto funkci vložíme do Modul1 a vydefinujeme funkci SearchRows jako Public .
Public Function SearchRows(ByRef BindingSourcePom As BindingSource, ByVal sColumn As String, ByVal sItem As String) As Integer
'vytvorime docasny defaultview, pomoci ktereho budeme vyhledavat
Dim ds As DataSet = BindingSourcePom.DataSource
Dim dt As DataTable = ds.Tables(BindingSourcePom.DataMember)
'nastavime datove pole, podle ktereho setridime vzestupne tabulku
dt.DefaultView.Sort = sColumn & " " & "ASC"
'vytvorime pole odpovidajici zadanemu kriteriu
'hledame v setridenem sloupci. % znamena jakykoliv znak
Dim dr() As DataRow = dt.Select(sColumn & " LIKE '%" & sItem & "%'")
'Pokud jsme neco nasli, tak najdeme pozici radku v puvodni tabulce
If dr.Length > 0 Then
Dim i As Integer = dt.DefaultView.Find(dr(0)(sColumn))
Return i
Else
'nic jsme nenasli
Return -1
End If
End Function