FindExpress Ver 1.0

Ένα χρησιμότατο .ΝΕΤ 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 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 θα επιστρέψει το μήνυμα λάθους.

 

Mέθοδοι

 

1) SetCaption         : Αλλάζει το caption (επικεφαλίδα για το Grid) ενός πεδίου.

2) ArrayListToString  : Παίρνει το ArrayList που έχει τα πεδία του Grid και δημιουργεί ένα String. Χρησιμοποιείται

   για την ιδιότητα DisplayFields. O προγραμματιστής καθορίζει τα πεδία με το ευέλικτο  

   ArrayList, βάζοντας κόμβους τύπου FieldsArrayListItem, και κατόπιν με τη μέθοδο αυτή θέτει  

   την ιδιότητα.

3) StringToArrayList   : Το αντίστροφο της προηγούμενης.

 

  Public Αντικείμενα

 

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.

 

ΠΡΟΒΛΗΜΑ ΜΕ ΤΟ PROJECT ΔΕΙΓΜΑΤΟΣ ΧΡΗΣΗΣ - ΛΥΣΗ.

 

Αν στα 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

Χρήστος Μουρατίδης