Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Sorting σε DataGridView

Îåêßíçóå áðü ôï ìÝëïò Azular. Τελευταία δημοσίευση από το μέλος tasos στις 29-05-2007, 13:24. Υπάρχουν 8 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  09-05-2007, 12:46 31630

    Sorting σε DataGridView

    ΥΠΟΘΕΤΙΚΟ ΠΑΡΑΔΕΙΓΜΑ
    Έχω ενα πίνακα: TABLE_OIKISMOI με πεδία:OIKISMOS_NAME, NOMOSID
    Έχω δέυτερο πίνακα:TABLE_NOMΟΙ με πεδία:NOMOS_NAME, NOMOSID

    Στον Dataset συσχετίζω τους δύο πίνακες μέσω του NOMOSID

    Φτιάχω ένα Bindinsource με τον πίνακα TABLE_OIKISMOI και ορίζω αυτό το Bindinsource σαν DataSource του DataGridView

    Έτσι οταν τρέχει ο χρήστης βλέπει τα δεδομένα του TABLE_OIKISMOI (OIKISMOS_NAME, NOMOSID) και ανάλογα sort-αρει με βάσης τα δύο πεδία

    Στην συνέχεια φτιάχνω ένα  DataGridViewComboBoxColumn με σκοπό να εμφανίσω στο DataGridView στο πεδίο NOMOSID τα δεδομένα του πεδίου NOMOS_NAME από τον πίνακα TABLE_NOMΟΙ.

    Μέχρι εδώ δουλεύουν όλα OK.
     Τώρα ο χρήστης βλέπει στο DataGridView, OIKISMOS_NAME (του πίνακα TABLE_OIKISMOI) , NOMOS_NAME (του πίνακα TABLE_NOMΟΙ,σαν κελι με combobox)

    Εδω προκύπτει το πρόβλημα.Όταν πάει να sortαρει με βάση το NOMOS_NAME τα δεδομένα sortαρονται με βάση την στήλη που έχουμε αντικαταστήσει, την NOMOSID.Και στην ουσία ο χρήστης δεν βλέπει ταξινομημένα τα δεδομένα του με βάση την αλφαβητική σειρά των Νομών αλλά με τον κωδικό τους που είναι στην ουσία κρυμένος απο πίσω.

    Κάνω κάτι λάθος στην λογική ή υπάρχει κάποια ιδιότητα ή τεχνική που αγνοώ σχετικά με αυτόν τον τρόπο sorting;
    Ευχαριστώ για την υπομονή.


  •  09-05-2007, 18:36 31646 σε απάντηση της 31630

    Απ: Sorting σε DataGridView

    Δεν κάνεις κάτι λάθος, απλά δεν γίνεται. Workarounds υπάρχουν αν σε ενδιαφέρει, αλλά έτσι όπως πας να το κάνεις δεν θα γίνει. 
  •  09-05-2007, 20:15 31648 σε απάντηση της 31646

    Απ: Sorting σε DataGridView

    Απ'οσο έψαξα και γώ στο Google δεν πήρα μια σαφή απάντηση.Μήπως είναι εύκολο να με καθοδηγήσετε;
  •  10-05-2007, 00:15 31656 σε απάντηση της 31648

    Απ: Sorting σε DataGridView

    Τα καλά ή τα κακά νέα;

    Τα καλά νέα είναι ότι υπάρχουν δύο τρόποι για να ταξινομήσεις ένα DataGridView πάνω στην τιμή που δείχνει ένα ComboBox column (για την ακρίβεια αυτοί οι δύο τρόποι ισχύουν για όλα τα columns που δείχνουν "επεξεργασμένες" τιμές, πχ computed-unbound columns)

    O πρώτος τρόπος είναι να χρησιμοποιήσεις την μέθοδο Sort του DataGridView περνώντας ένα IComparer method. Ο δεύτερος τρόπος είναι να χρησιμοποιήσεις το SortCompare event. Και για τους δύο τρόπους θα βρεις αρκετό υλικό στο MSDN

    Τα κακά νέα είναι ότι αυτοί οι δύο τρόποι δεν δουλεύουν όταν το DataGridView είναι binded... Οπότε, θα πρέπει μέσω κώδικα να το κάνεις populate και αντίστοιχα, όταν ο χρήστης κάνει αλλαγές να περνάς πίσω τις τιμές στο source. Ακούγεται εύκολο αλλά δεν είναι και τόσο.

    Ο λόγος που εν γένει δεν υποστηρίζεται τέτοιου είδους sorting δεν έχει να κάνει με το DataGridView όσο με τον binding μηχανισμό. Το DataGridView είναι χαζό και δείχνει ότι του δώσει το BindingSource. Αυτό με τη σειρά του δεν ταξινομεί τα data αλλά περνάει το "request" ταξινόμησης στο DataView του DataTable. H Sort μέθοδος του DataView (που κάνει τη δουλειά) δεν έχει τρόπο να διαβάσει τη lookup τιμή που υπάρχει για κάποιο FK καθώς τα μόνα πεδία που γνωρίζει είναι αυτά του DataTable.

    Αν σου είναι απαραίτητη η ταξινόμηση σε αυτό το πεδίο, μπορείς να κάνεις bind σε κάποιο database view που θα δίνει έτοιμες τις τιμές. Βέβαια, έτσι δεν θα μπορείς να κάνεις in-place editing στα data rows, θα πρέπει να ανοίγεις ξεχωριστή φόρμα με την εγγραφή σε details. Προσωπικά δεν με χαλάει αυτή η τεχνική γιατί γενικά δεν συμπαθώ το in-place editing.


    Vir prudens non contra ventum mingit
  •  10-05-2007, 09:47 31669 σε απάντηση της 31630

    Απ: Sorting σε DataGridView

    Λίγο πολύ αυτά είναι τα workarounds που έγραψε ο KelMan. Υπάρχει όμως άλλο ένα το οποίο θα σου επιτρέψει να κάνεις και in place editing.

    Θα μπορούσες στο sql statement που δίνεις για να σου φέρει τον πίνακα TABLE_OIKISMOS εκτός από τα columns που ήδη φέρνει να σου φέρνει και το NOMOS_NAME. Προσθέτεις στο Grid το column αυτό αλλά να μην φαίνεται. Και όταν κάνει sort στο Nomos_ID column εσύ να του λες να κάνει στο Nomos_Name.

    Είναι μία προσέγγιση και αυτή.

  •  11-05-2007, 16:50 31730 σε απάντηση της 31669

    Απ: Sorting σε DataGridView

    Δηλαδή εννοείς ένα Join Query που θα το χρησιμοποιώ στα Select,Insert,Update,Delete commands που γεμίζω τα DataTables από τους πίνακες της βάσης;Το έχεις δοκιμάσει;Υπάρχει κάποιο παράδειγμα;

  •  11-05-2007, 20:03 31738 σε απάντηση της 31730

    Απ: Sorting σε DataGridView

    Να χρησιμοποιήσεις ένα Join Query μόνο για το select. Τα υπόλοιπα queries να τα γράψεις κανονικά όπως θα τα έγραφες αν σου γινόταν αυτό που θες

    Δυστυχώς λόγω της ώρας δεν μπορώ να σου δώσω περισσότερες λεπτομέρειες τώρα. Αν όμως το θέλεις από εβδομάδα θα μπορέσω...

  •  29-05-2007, 12:12 32308 σε απάντηση της 31738

    Απ: Sorting σε DataGridView

    Θα μπορούσες σε παρακαλώ να μου δείξεις ένα tutorial;Όποτε ευκαιρείς.Δεν το βιάζομαι.Ευχαριστώ πάντως όλους για την πολύτιμη βοήθεια και καθοδήγηση.
  •  29-05-2007, 13:24 32313 σε απάντηση της 31630

    Απ: Sorting σε DataGridView

    Το SQL statement που θα σου επιστρέψει τα δεδομένα όπως θέλεις είναι

    SELECT TABLE_OIKISMOI.OIKISMOS_NAME, TABLE_NOMOI.NOMOS_NAME
    FROM TABLE_NOMOI, TABLE_OIKISMOI
    WHERE TABLE_NOMOI.NOMOSID = TABLE_OIKISMOI.NOMOSID
    ORDER BY TABLE_NOMOI.NOMOS_NAME

    Το "ORDER BY" κάνει τη ταξινόμηση που θέλεις. Έτσι έχεις τα δεδομένα σου με τη μορφή που θέλεις από τη βάση δεδομένων, χωρίς η εφαρμογή σου να χρειάζεται να παρέμβει επιπλέον. Ελπίζω να βοήθησα.

    Υ.Γ. Αν θέλεις το αποτέλεσμα να είναι με αντίστροφη σειρά βάζεις τη λέξη DESC στο τέλος του ORDER BY.

    Τάσος Καραγιάννης

    Baby debugging steps...
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems