Ένα χρησιμότατο .ΝΕΤ control για την γρήγορη εύρεση κάποιου κωδικού (κι όχι μόνο) με βάση μία τιμή αναζήτησης, σε εφαρμογές βάσεων δεδομένων Access. Στην εικόνα, βλέπουμε μία φόρμα όπου αν πατήσουμε το button … (ellipsis) θα ανοίξει μία άλλη φόρμα ανεύρεσης κωδικού. Σε αυτήν, έχουμε τοποθετήσει το FindExpress control. Έχοντας ορίσει ως αναζήτηση το πεδίο ΕΠΩΝΥΜΟ, δίνοντας την τιμή ΠΑΠ, θα ψάξει να φέρει όλες τις εγγραφές που αρχίζουν με το επώνυμο ΠΑΠ. Επιλέγοντας κάποιον και πατώντας το OK button (ή κάνοντας double-clik) ο κωδικός του έρχεται στo textbox της προηγούμενης φόρμας .
Το πεδίο αναζήτησης, το πεδίο επιστροφής τιμής, ο πίνακας-πηγή καθώς και το ποια πεδία θα εμφανίσει το Grid του control (με έξτρα χαρακτηριστικά για το καθένα, όπως επικεφαλίδα, στοίχιση, πλάτος), όλα αυτά ορίζονται σε αντίστοιχες ιδιότητες λύνοντας πραγματικά τα χέρια του προγραμματιστή!
Χρήστος Μουρατίδης 2004
Αποσυμπιέσετε με ένα πρόγραμμα συμπίεσης πχ. WinZip τα περιεχόμενα του αρχείου FindExpressControl.zip σε κάποιο φάκελο στο δίσκο. Θα δείτε να δημιουργείται ένας φάκελος με όνομα FindExpress Test, ο οποίος περιέχει ένα project δείγματος χρήσης του control
καθώς και το παρόν readme αρχείο. Το project παρέχει μία υποδειγματική εφαρμογή χρήσης του control με πλούσια επεξηγηματικά σχόλια.
Σε αρκετές εφαρμογές, ο προγραμματιστής επιθυμεί να παρέχει στο χρήστη τη δυνατότητα να βρίσκει πολύ γρήγορα ένα κωδικό με βάση κάποια άλλα στοιχεία του π.χ. επώνυμο. Το FindExpress του λύνει πραγματικά τα χέρια καθώς παρέχει ένα έτοιμο interface για αυτό το σκοπό:
Τοποθέτησε το control σε μία φόρμα. Αν καθορίσεις στην ιδιότητα Anchor τις κατάλληλες τιμές, τότε το control θα μεγαλώνει ανάλογα καθώς θα αλλάζουν οι διαστάσεις της φόρμας. Π.χ. αν καθορίσεις, μεταξύ άλλων, και bottom τότε αυξάνοντας προς τα κάτω θα αυξάνεται και ο χώρος εμφάνισης των εγγραφών.
Παράδειγμα:
- Δημιούργησε τα σχετικά ADO.NET αντικείμενα για την πρόσβαση στη ΒΔ.
daStudents = New OleDbDataAdapter("Select * from ΜΑΘΗΤΕΣ", strConn)
dsStudents = New DataSet()
daStudents.Fill(dsStudents, "Students")
- Καθόρισε την
ιδιότητα DataTableSource (πηγή δεδομένων), πρώτα .
FindExpress1.DataTableSource = dsStudents.Tables("Students") ‘Τύπου DataTable.
- Kαθόρισε το
πεδίο εύρεσης, καθώς και
προαιρετικά μία αρχική τιμή αναζήτησης.
FindExpress1.FindField =
"ΕΠΩΝΥΜΟ" 'Θα ψάχνει με βάση το επώνυμο.
FindExpress1.FindValue
= "ΠΑΠ"
- Kαθόρισε το πεδίο επιστροφής τιμής:
FindExpress1.ReturnField = "ID"
- Καθόρισε τα πεδία εμφάνισης στο Grid. Δημιουργούμε ένα ArrayList στο οποίο κάθε κόμβος θα περιέχει πληροφορίες εμφάνισης κάθε πεδίου.
Dim DisplayFieldsInGrid As New ArrayList()
Dim DisplayFieldItem As New FindExpress.FindExpress.FieldsArrayListItem() 'Ένας κόμβος του ArrayList. Περιέχει πληροφορίες για τα πεδία.
With
FindExpress1
DisplayFieldItem.FieldName = "ID" : DisplayFieldItem.Caption
= "Κωδικός" : DisplayFieldItem.Alignment = HorizontalAlignment.Right : DisplayFieldItem.DataTypeOfField
= "System.Int32" : DisplayFieldItem.ColWidth
= 50 'pixels. Εδώ είναι Long
τύπος. Για απλό Integer βάζουμε
"System.Int16"
DisplayFieldsInGrid.Add(DisplayFieldItem)
DisplayFieldItem.FieldName
= "ΕΠΩΝΥΜΟ" : DisplayFieldItem.Caption = "Επώνυμο" : DisplayFieldItem.Alignment = HorizontalAlignment.Left : DisplayFieldItem.DataTypeOfField = "System.String"
: DisplayFieldItem.ColWidth
= 90 'pixels
DisplayFieldsInGrid.Add(DisplayFieldItem)
DisplayFieldItem.FieldName
= "ΟΝΟΜΑ" : DisplayFieldItem.Caption = "Όνομα" : DisplayFieldItem.Alignment = HorizontalAlignment.Left : DisplayFieldItem.DataTypeOfField = "System.String"
: DisplayFieldItem.ColWidth
= 90 'pixels
DisplayFieldsInGrid.Add(DisplayFieldItem)
DisplayFieldItem.FieldName
= "ΗΜΕΡΟΜ_ΕΓΓΡΑΦΗΣ" :
DisplayFieldItem.Caption = "Ημερ/νία"
: DisplayFieldItem.Alignment = HorizontalAlignment.Right : DisplayFieldItem.DataTypeOfField = "System.DateTime" : DisplayFieldItem.ColWidth
= 70 'pixels
DisplayFieldsInGrid.Add(DisplayFieldItem)
'Πέρασε
τα πεδία στην ιδιότητα DisplayFields.
' H μέθοδος ArrayListToString θα
μετατρέψει τους κόμβους του ArrayList σε
συμβολοσειρά.
.DisplayFields = .ArrayListToString(DisplayFieldsInGrid)
End With
Μέσω της ιδιότητας ReturnValue
(τύπου object)
επιστρέφεται μία τιμή. Ο κώδικας να τοποθετείται στο γεγονός OnSelected του control:
Private Sub FindExpress1_OnSelected() Handles
FindExpress1.OnSelected
If Not
(FindExpress1.ReturnValue Is Nothing) Then
intCode = CInt(FindExpress1.ReturnValue)
End If
Me.Close()
End Sub
Εφόσον η IntCode είναι τύπου Integer θα πρέπει να γίνει η μετατροπή με τη συνάρτηση Cint.
Αν και μπορούμε να ορίσουμε τις ιδιότητες σε design-mode, είναι πιο ευέλικτο να τις θέτουμε σε run-time mode. Σε κάθε περίπτωση, πρέπει πρώτη απ’ όλες να ορίζεται η ιδιότητα DataTableSource.
Σε design-mode παρέχονται εύχρηστες φόρμες για καθορισμό των ιδιοτήτων FindField, ReturnField και DisplayFields. Δείτε ένα παράδειγμα, ορισμού πεδίων πεδίων εμφάνισης στο Grid για την ιδιότητα DisplayFields :
Δείτε την εφαρμογή επίδειξης που περιέχει αρκετά σχόλια ως τεκμηρίωση.
Παρακάτω παρουσιάζονται οι ιδιότητες, μέθοδοι και τα γεγονότα του control :
1) DataTableSource :ο πίνακας τροφοδότης των πεδίων, τύπου DataTable.
2) FindField :Το πεδίο
εύρεσης, τύπου String.
3) FindValue :Η αρχική
τιμή εύρεσης (προαιρετικό).
4) ReturnField :To πεδίο
επιστροφής τιμής, τύπου String.
5) ReturnValue :H τιμή
επιστροφής, τύπου Object.
6) DisplayFields :Tα πεδία εμφάνισης του Grid
με τις
πληροφορίες τους (Caption,Alignment,DataTypeOfField,
ColWidth). Τύπου String.
7) ErrorMsg :Το μήνυμα λάθους που επιστρέφει το
γεγονός OnErrorFindExpress
8)
ForeColorTextBox :To ForeColor του TextBox εύρεσης.
9)
ForeColorButton :To ForeColor του Button «Εύρεση».
10)ForeColorHeaderGrid :To ForeColor
των επικεφαλίδων του Grid.
11)ForeColorTextGrid :To ForeColor των κελιών του Grid.
12)ForeColorSelectGrid :To ForeColor της επιλεγμένης γραμμής του
Grid.
13)BackColorButton :To BackColor του button «Εύρεση».
14)BackColorHeaderGrid :To BackColor των επικεφαλίδων του Grid.
15)BackColorTextGrid :To BackColor των κελιών του Grid.
16)BackColorSelectGrid :To BackColor της επιλεγμένης γραμμής του
Grid.
17)FontTextBox :To Font του TextBox εύρεσης.
18)FontButton :To Font του Button «Εύρεση».
19)FontHeaderGrid :To Font των επικεφαλίδων του Grid.
20)FontTextGrid :To Font των κελιών του Grid.
21)VisibleGridHeaders :Θα είναι ορατή η γραμμή
επικεφαλίδων του Grid;
1) ΟnSelected() : Ενεργοποιείται όταν πατηθεί το OK (το πράσινο check).
2) OnEscPressed() : Ενεργοποιείται όταν πατηθεί το Ακύρωση (το κόκκινο x).
3) OnErrorFindExpress(): Ενεργοποιείται όταν συμβεί κάποιο λάθος. Τότε η ιδιότητα ErrorMsg θα επιστρέψει το μήνυμα λάθους.
1) SetCaption : Αλλάζει το caption (επικεφαλίδα για το Grid)
ενός πεδίου.
2) ArrayListToString : Παίρνει το ArrayList που έχει τα πεδία του Grid και δημιουργεί ένα String.
Χρησιμοποιείται
για την ιδιότητα DisplayFields. O προγραμματιστής καθορίζει τα
πεδία με το ευέλικτο
ArrayList, βάζοντας κόμβους τύπου FieldsArrayListItem, και κατόπιν με τη μέθοδο αυτή θέτει
την
ιδιότητα.
3) StringToArrayList : Το
αντίστροφο της προηγούμενης.
1)
FieldsArrayListItem : Ένα αντικείμενο μιάς δομής ArrayList, για τα πεδία εμφάνισης του
Grid.
Περιλαμβάνει τις μεταβλητές :
Caption : Καθορίζεις την επικεφαλίδα του
πεδίου για το Grid.
Alignment :
Επιλέγεις στοίχιση (Left, Center, Right).
DataTypeOfField
: Kαθορίζεις ένα string
που υποδηλώνει
τον τύπο του πεδίου (System.Type). Συνήθεις τιμές :
“System.String” : String
“System.Int16” : Integer
“System.Int32” : Long
“System.Single” : Single
“System.DateTime”:Date /
Time
“System.Boolean” : Boolean
ColWidth : To πλάτος της στήλης σε
pixels.
Προσθέστε στο ToolBox της VB.NET το FindExpress control και χρησιμοποιήστε το ελεύθερα στις εφαρμογές σας. Το assembly αρχείο FindExpress.dll θα το βρείτε στο φάκελο bin.
Αν στα References του project δείγματος χρήσης εμφανίζει με κίτρινο θαυμαστικό το findexpress τότε πρέπει να ενημερώσετε το Reference Path του project ώστε να ψάχνει στο φάκελο που έχετε βάλει το dll του control.
1) Στο Solution Explorer κάντε δεξί κλικ στο prοject και επιλέξτε Properties.
2) Στο παράθυρο ιδιοτήτων του project που ανοίγει, πηγαίνετε στο τμήμα Common Properties και Reference Path.
3) Δεξιά, πατήστε το browse button (...) για να βρείτε το Folder όπου βρίσκεται το assembly dll του control στον δικό σας υπολογιστή.
4) Πατήστε το button Update. Σώστε το project, κλείστε το και ξανανοίξτε το. Τώρα, πρέπει να εμφανίζονται όλα κανονικά.
Δείτε την εφαρμογή επίδειξης που περιέχει αρκετά σχόλια ως τεκμηρίωση.
Για οποιεσδήποτε παρατηρήσεις στείλτε e-mail στην παρακάτω διεύθυνση.
mouratx@yahoo.com
Χρήστος Μουρατίδης