DataNavigator v1.0

Η εξέλιξη του ADO.NET Data Control για την πλατφόρμα .ΝΕΤ Framework 2.0

 

 Ένα Data Control με δυνατότητες εφάμιλλες με το γνωστό Data Control της VB6 για διαχείριση απλών desktop Windows εφαρμογών Βάσεων Δεδομένων (ΒΔ). Επιπλέον, διευκολύνει και τη διασύνδεση (data-binding) με τα textboxes, comboboxes, checkboxes κ.α.  μίας φόρμας για την παρουσίαση των πεδίων μίας εγγραφής.  

Μπορεί να χρησιμοποιηθεί είτε για Cursor processing (δηλ. μία-μία εγγραφή, άποψη καρτέλας) είτε για Batch processing (διασύνδεση με DataGridView).

 

 

Χρήστος Μουρατίδης,  Μάρτιος 2006

 

Αποσυμπιέσετε με ένα πρόγραμμα συμπίεσης πχ. WinZip τα περιεχόμενα του αρχείου DataNavigator Test.zip σε κάποιο φάκελο στο δίσκο. Θα δείτε να δημιουργείται ένας φάκελος με όνομα  DataNavigator Test, ο οποίος περιέχει ένα project δείγματος χρήσης του control 

καθώς και το παρόν readme αρχείο. Το project παρέχει μία δύο υποδειγματικές εφαρμογές διαχείρισης των εγγραφών μίας ΒΔ : μία για Cursor processing και μία για Batch Processing.

Λίγα λόγια για το DataNavigator Control

Ποιος δεν θυμάται το καλό Data Control της VB6 όπου μπορούσε να το χρησιμοποιήσει για την εύκολη πλοήγηση και διαχείριση των εγγραφών μίας Βάσης Δεδομένων;  Στη VB.NET υπάρχει, βέβαια, το αντίστοιχο που βασίζεται στην τεχνολογία ADO αλλά δεν υπάρχει αντίστοιχο χρησιμοποιώντας την τεχνολογία ADO.NET. Αυτό οφείλεται στον προσανατολισμό της τεχνολογίας ADO.NET όπου είναι κυρίως η ασύγχρονη ενημέρωση μίας ΒΔ, που είναι αποθηκευμένη σε έναν server,  από μία client εφαρμογή (συνήθως ASP.NET εφαρμογή).

 

*        Στη Visual Basic 2005 υπάρχει πλέον το BindingNavigator που κάνει τη σχετική δουλειά. Παρόλα αυτά, εξέλιξα το ADO.NET Data Control σε ένα νέο control, τεχνολογίας .ΝΕΤ 2.0, το οποίο συνδυάζει το γραφικό interface του BindingNavigator με τον μηχανισμό του ADO.NET Data Control. Υπάρχουν έξτρα buttons για την προσθήκη, διαγραφή και αποθήκευση των εγγραφών, τα οποία ο προγραμματιστής μπορεί να καθορίσει να εμφανίζονται ή όχι.

Επίσης, το control είναι εντελώς αυτόνομο, δηλαδή δεν βασίζεται σε LightButtons όπως το ADO.NET Data control.

 

To βασικό εσωτερικό αντικείμενο που χρησιμοποιεί το control είναι ένα DataView. To γραφικό interface βασίζεται σε ένα ToolStrip button.

 

Cursor Processing :

            Προσπάθησα, λοιπόν, να κατασκευάσω ένα Data Control με φιλοσοφία προσανατολισμένη στο Recordset και άμεση ενημέρωση της ΒΔ. Δηλαδή, μόλις εισαχθεί ή διορθωθεί μία εγγραφή  τότε ενημερώνεται αμέσως η ΒΔ. Παρότι, εσωτερικά χρησιμοποιεί τα αντικείμενα του ADO.NET (Connection, DataAdapter, CommandBuilder, DataView κλπ), στον προγραμματιστή παρέχει τη φιλοσοφία του Recordset. Βέβαια, ο προγραμματιστής μπορεί να χρησιμοποιήσει με τη δέουσα προσοχή, αν θέλει, τα αντικείμενα του ADO.NET καθόσον παρέχονται ως public αντικείμενα από τον control. 

 

Batch Processing :

            To control μπορεί να διασυνδεθεί με ένα DataGridView   Π.χ.:   DataGridView1.DataSource = DataNavigatorl.objDataView

      Ο χρήστης μπορεί να κάνει προσθήκες, μεταβολές, και διαγραφές στο DataGridView και καλώντας κατόπιν τη μέθοδο

      DataNavigator1.RsUpdate ενημερώνεται η ΒΔ. Η μέθοδος Data Navigator1.RsRefresh γεμίζει πάλι το εσωτερικό DataView με τα δεδομένα της Βάσης.

 

            Το control παρέχει πρόσβαση σε πίνακες/queries σε Access Database κάνοντας χρήση του OLEDB Provider και της μηχανής Jet 4.0 (Για Access 2000, 2002, 2003).

 

Παρακάτω παρουσιάζονται οι ιδιότητες, μέθοδοι και τα γεγονότα του control.

Ιδιότητες                                 

1)    BackColorCaption  : Το background χρώμα του caption.

2)    Caption           : Το κείμενο του control. Συνήθως, εμφανίζει την τρέχουσα εγγραφή / σύνολο εγγραφών.

3)    CaptionWidth      : To πλάτος του Caption.

4)       AllowAdd          : Επιτρέπει ή όχι την εισαγωγή νέων εγγραφών

1)       AllowEdit         : Επιτρέπει ή όχι την τροποποίηση των εγγραφών

2)       AllowDelete       : Επιτρέπει ή όχι την εισαγωγή νέων εγγραφών

3)       SortText          : Το αλφαριθμητικό Sort, όπως έχει τεθεί στη μέθοδο RsSort (readOnly)

4)       FilterText        : Το αλφαριθμητικό Filter, όπως έχει τεθεί στη μέθοδο RsFilter (readΟnly)

5)     FindTypeForString    : Για string πεδία. Ο τύπος αναζήτησης, τύπου FindTypeForStringEnum, που θα χρησιμοποιηθεί στη μέθοδο RsFind.    

6)     MatchCaseForString   : Για string πεδία. Αν θα κάνει ταίριασμα κεφαλαίων/πεζών στην αναζήτηση με τη μέθοδο (RsFind)

7)       PrimaryKeyIncrementalType : Καθορίζει αν το Primary key είναι αυτόματης αύξουσας (ΑutoIncremental) αρίθμησης ή όχι (Manual).

8)       RefreshAfterInsert   : Καθορίζει αν μετά την εισαγωγή μίας εγγραφής θα καλείται η μέθοδος RsRefresh, η οποία ανανεώνει το

  RecordSet με τα νέα δεδομένα της ΒΔ. Απαραίτητο αν έχετε ορίσει ένα AutoIncremental primary key, αλλιώς

  μπορεί να πάρετε μηνύματα τύπου «Concurrency Violation». Ισχύει μόνο για Cursor processing.  

9)       AutoUpdateAfterMove  : Καθορίζει αν θα γίνεται αυτόματα ενημέρωση της τρέχουσας εγγραφής στη Βάση, πατώντας τα κουμπιά

                                        μετακίνησης.

10)    ConnectionString     : Επιστρέφει το ConnectionString του control, όπως έχει καθοριστεί κατά τη μέθοδο Open. (read-only)

11)    HasChanges           : Επιστρέφει True αν έχουν γίνει αλλαγές στο Recordset μετά την τελευταία ενημέρωση της BΔ. (read-only)

12)    ShowAddButton        : Καθορίζει την εμφάνιση ή όχι του button Add (νέα εγγραφή, ο σταυρός).

13)    ShowDeleteButton     : Καθορίζει την εμφάνιση ή όχι του button Delete (διαγραφή εγγραφής, το χ).

14)    ShowSaveButton       : Καθορίζει την εμφάνιση ή όχι του button Save (αποθήκευση, η δισκέτα).

15)  ButtonsNavigationEnable : Καθορίζει αν θα είναι ενεργοποιημένα τα buttons μετακίνησης.

16)  ShowButtonToolTips    : Καθορίζει αν θα εμφανίζονται τα έτοιμα tooltips για τα buttons.

 

Μέθοδοι

1)    Open            : Ανοίγει ένα RecordSet από τη ΒΔ (πίνακα ή query). Δέχεται ένα ConnectionString και την SQL

πρόταση επιλογής εγγραφών ή το όνομα ενός πίνακα/query (Εσωτερικά, δημιουργεί τα σχετικά ADO.NET   

   αντικείμενα).

2)    Close           : Κλείνει το RecordSet και τη σύνδεση.

3)    RsRefresh       : Ξαναφέρνει τις εγγραφές από τη ΒΔ (κι επαναδημιουργεί το RecordSet και τα σχετικά ADO.NET

   αντικείμενα.  

4)    RsEmpty         : Ελέγχει αν το Recordset είναι άδειο.

5)    RsMode          : Επιστρέφει την τρέχουσα κατάσταση του Recordset (αν είναι σε Αdd, Edit ή Normal Mode).

6)    BindData        : Διασυνδέει ένα control μίας φόρμας με ένα πεδίο.

7)    RsPosition      : Επιστρέφει την τρέχουσα θέση της εγγραφής στο Recordset (Ξεκινώντας από το 0).

8)    RsCount         : Επιστρέφει το πλήθος των εγγραφών του Recordset.     

9)    RsFind          : Αναζητά μία εγγραφή στο Recordset με βάση μία ή περισσότερες τιμές κριτηρίων. 

10)RsSort          : Ταξινομεί το Recordset με βάση ένα ή περισσότερα πεδία.

11)RsFilter        : Φιλτράρει τις εγγραφές του Recordset σύμφωνα με ένα αλφαριθμητικό φιλτραρίσματος (π.χ.

ΠΟΛΗ=’ΑΘΗΝΑ’”).

12)RsFindDuplicates: Βρίσκει τις διπλές καταχωρημένες τιμές ενός πεδίου (π.χ. διπλοί κωδικοί).     

13)RsGotoRecord    : Μεταβαίνει σε μία εγγραφή με βάση τον αριθμό της στο Recordset.

14)RsMoveFirst     : Μεταβαίνει στην πρώτη εγγραφή.

15)RsMoveLast      : Μεταβαίνει στην τελευταία εγγραφή. 

16)RsMoveNext      : Μεταβαίνει στην επόμενη εγγραφή.

17)RsMovePrevious  : Μεταβαίνει στην προηγούμενη εγγραφή.

18)RsAddNew        : Προσθέτει μία νέα εγγραφή. Τα διασυνδεόμενα textboxes και άλλα controls γίνονται κενά για να

    δεχτούν τις τιμές των πεδίων. Συνιστάται να χρησιμοποιείται μόνο σε Cursor processing.

19)RsUpdate        : Ενημερώνει άμεσα στη ΒΔ την εγγραφή /εγγραφές. 

20)RsCancelUpdate  : Ακυρώνει την εισαγωγή/ διόρθωση της τρέχουσας εγγραφής..

21)RsDelete        : Διαγράφει την τρέχουσα εγγραφή.

22)ExecuteCommand  :  Εκτελεί ένα ερώτημα ενημέρωσης / διαγραφής (Update / Delete SQL statement). Χρησιμοποιείται η

τρέχουσα σύνδεση ή κάποια άλλη.

23)ExecuteScalar    : Επιστρέφει μία τιμή που είναι αποτέλεσμα ενός στατιστικού ερωτήματος επιλογής (Aggregate SQL

   statement). Π.χ. “Select Count(*) from ΜΑΘΗΤΕΣ”  θα επιστρέψει το πλήθος των μαθητών. 

    Χρησιμοποιείται η τρέχουσα σύνδεση ή κάποια άλλη.

24)ExecuteReader    : Επιστρέφει ένα αντικείμενο DataReader με βάση ένα Select SQL statement. Χρησιμοποιείται η τρέχουσα σύνδεση ή

                     κάποια άλλη.

Γεγονότα

 

1)    ΟnMoveComplete() : Ενεργοποιείται όταν γίνεται επιτυχώς μετάβαση σε μία εγγραφή πατώντας τα κουμπιά μετακίνησης. 

Μόνο για Cursor processing.

2)    ΟnMoving()       : Ενεργοποιείται όταν πρόκειται να γίνει μετάβαση σε μία εγγραφή πατώντας τα κουμπιά μετακίνησης.

   Παρέχει την κατεύθυνση της μετακίνησης ενώ έχουμε τη δυνατότητα να ακυρώσουμε τη μετακίνηση. 

Χρήσιμο για validations. Μόνο για Cursor processing.

3)    OnDataError()     : Ενεργοποιείται όταν συμβεί κάποιο σφάλμα δεδομένων. H παράμετρος err επιστρέφει το μήνυμα

λάθους.

4)    OnButtonAddClick() : Ενεργοποιείται όταν πατηθεί το button Add.

5)    OnButtonDeleteClick() : Ενεργοποιείται όταν πατηθεί το button Delete.

6)    OnButtonSaveClick() : Ενεργοποιείται όταν πατηθεί το button Save.

 

 

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

 

7)    objConnection  : Το αντικείμενο OleDbConnection για τη σύνδεση με τη ΒΔ.

8)    objDataAdapter : Το αντικείμενο OleDbDataAdapter για την επικοινωνία DataSet και ΒΔ.

9)    objCommBuilder : Το αντικείμενο OleDbCommandBuilder για την αυτόματη δημιουργία των INSERT,UPDATE,DELETE εντολών

                     του DataAdapter.

10)objDataSet     : Το αντικείμενο DataSet.

11)objDataView    : Το αντικείμενο DataView, το οποίο περιέχει τις εγγραφές του RecordSet.

 

12)  Απαρίθμηση FindTypeForStringEnum για καθορισμό του τύπου Αναζήτησης (Find) για string πεδία. Περιλαμβάνει τα:

       Equal       : Για να βρούμε αν η τιμή του πεδίου ισούται με τη συγκεκριμένη τιμή αναζήτησης.

StartsWith  : Για να βρούμε αν η τιμή του πεδίου ξεκινάει με τη συγκεκριμένη τιμή αναζήτησης.

EndsWith    : Για να βρούμε αν η τιμή του πεδίου τελειώνει με τη συγκεκριμένη τιμή αναζήτησης.

Contains    : Για να βρούμε αν η τιμή του πεδίου περιέχει τη συγκεκριμένη τιμή αναζήτησης.

 

   9) Απαρίθμηση  PrimaryKeyIncrementalTypeEnum για καθορισμό του τύπου του Primary key : Περιλαμβάνει τα

        AutoIncremetal    : To Primary key είναι ένα πεδίο αυτόματης αρίθμησης.

        ManualIncremental : To Primary key είναι ένα πεδίο που η αρίθμησή του καθορίζεται manual.

 

13)  Απαρίθμηση  MovingDirectionEnum για τη μετακίνηση σε μία εγγραφή. Χρησιμοποιείται από το γεγονός OnMoving

        FirstRec     : Πρόκειται να γίνει μετακίνηση στην πρώτη εγγραφή

        PreviousRec  : Πρόκειται να γίνει μετακίνηση στην προηγούμενη εγγραφή

        NextRec      : Πρόκειται να γίνει μετακίνηση στην επόμενη εγγραφή

 LastRec      : Πρόκειται να γίνει μετακίνηση στην τελευταία εγγραφή

        GotoRec      : Πρόκειται να γίνει μετακίνηση σε κάποια εγγραφή με τη μέθοδο RsGotoRecord

        FindRec      : Πρόκειται να γίνει μετακίνηση σε κάποια εγγραφή με τη μέθοδο RsFind

        AddNewRec    : Πρόκειται να γίνει μετακίνηση σe νέα εγγραφή (όταν καλείται η μέθοδος RsAddNew)

 

14) Απαρίθμηση DataNavButtonsEnum για τα buttons :

                            MoveFirst

                             MovePrevious

        MoveNext

               MoveLast

        Add

        Delete

               Save

 

Παρατηρήσεις

Προσθέστε στο ToolBox της Visual Basic 2005 το DataNavigator και χρησιμοποιήστε το ελεύθερα στις εφαρμογές σας. Το assembly αρχείο DataNavigator.dll θα το βρείτε στο φάκελο bin/Release.

 

Για εφαρμογές .ΝΕΤ 1.x θα πρέπει να χρησιμοποιήσετε το ADO.NET Data Control.

 

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

 

Αν στα References του project δείγματος χρήσης εμφανίζει με κίτρινα θαυμαστικά τo DataNavigator control τότε πρέπει να ενημερώσετε τα Reference Path του project ώστε να ψάχνει στο φάκελο που έχετε βάλει τα dll των controls.

 

1) Στο Solution Explorer κάντε δεξί κλικ στο prοject και επιλέξτε Properties.

2) Στο παράθυρο ιδιοτήτων του project που ανοίγει, πηγαίνετε στο τμήμα References.

3) Επιλέξτε το DataNavigator και πατήστε το Remove button.

4) Κατόπιν, πατήστε το Add button και διαλέξτε Reference...

5) Επιλέξτε την καρτέλα Browse για να βρείτε το Folder όπου βρίσκεται το καθένα assembly dll των controls στον δικό σας υπολογιστή.

6) Σώστε το project, κλείστε το και ξανανοίξτε το. Τώρα, πρέπει να εμφανίζονται όλα κανονικά.  

 

Εναλλακτικά, και πιο ανώδυνα κάντε το εξής :

 

*        Ανοίξτε το αρχείο DataNavigator Test.vbproj με τo WordPad. Βρείτε τις παρακάτω γραμμές που αναφέρονται στα References του project :

……………………..

<ItemGroup>

 <Reference Include="DataNavigator, Version=1.0.2213.1486, Culture=neutral, processorArchitecture=MSIL">

      <SpecificVersion>False</SpecificVersion>

      <HintPath>E:\VB NET 05 Projects\DataNavigator\DataNavigator\bin\Release\DataNavigator.dll</HintPath>

  </Reference>

 

Διορθώστε τα paths που φαίνονται με τα βέλη ώστε να ανταποκρίνονται σε αυτά, όπου έχετε βάλει τα σχετικά dll των controls, στο δικό σας Η/Υ.

Επικοινωνία

Για οποιεσδήποτε παρατηρήσεις στείλτε e-mail στην παρακάτω διεύθυνση.

 

mouratx@yahoo.com

 

Δείγμα φόρμας  καρτέλας :

 

 

Δείγμα φόρμας  DataGridView :