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

 

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

Διαγραφή row σε DatagridView

Îåêßíçóå áðü ôï ìÝëïò tigrakas. Τελευταία δημοσίευση από το μέλος evliatsas στις 19-10-2006, 20:30. Υπάρχουν 3 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  19-10-2006, 13:28 18819

    Διαγραφή row σε DatagridView

    Παίδες καλημέρα,

    Έχω ένα datagridview το οποίο το γεμίζω από το source ενός binder. Πιο αναλυτικά η διαδικασία που ακολουθείτε είναι:
    1. στέλνω query στη βάση
    2. Παίρνω αποτελέσματα με dataAdapter (Oledb είναι όλα έτσι)
    3. Κάνω fill ένα datatable
    4. Γεμίζω το bindersource από το datatable
    5. datagridview.source = bindersource

    Μέχρι εδώ όλα καλά. Μια χαρά γεμίζει το datagridview και όλα κανονικά. Τώρα όμως θέλω το εξής: Πριν γεμίσω το datagridview και εφόσον ελέγξω οτι υπάρχουν αποτελέσματα στο source φτιάχνω μια στήλη με CheckBoxes που την ονομάζω colDelete. Αυτή είναι πάντα πρώτη στο Grid και χρησιμοποιείται όταν ο χρήστης θέλει να διαγράψει κάποιες row στο datagrid. Ουσιαστικά δηλαδή, κάνει κλικ στο checkbox δίπλα απο κάθε εγγραφή που θέλει να διαγράψει και πατάει το κουμπί διαγραφή. Μέχρι εδώ όλα καλά. Χτίζω το Query μου για τις επιλεγμένες εγγραφές και το στέλνω στη βάση και ενημερώνεται κανονικά. Η διαγραφή δε γίνεται πραγματικά βέβαια αλλά κάνει update τo flag των εγγραφών που ονομάζεται SEL_DELETED και το θέτει ως true (Το έκανα έτσι για να έχω τη δυνατότητα να μπορώ να τις επαναφέρω αν γίνει λάθος).Το πρόβλημα μου είναι ότι δε μπορώ να σβήσω τις rows από το Datagridview που "διέγραψα" από τη βάση. Σε pseudo παραθέτω ότι δοκίμασα το παρακάτω αλλά δεν έπαιξε:

    for i = 0 to rows.count -1
      if dtView.columns("colDelete").rows(i).value = true then
         dtView.rows.removeAt(i)
      end if
    next i

    Δε μου βγάζει μήνυμα λάθους αλλά ούτε και κάνει τίποτα. Δοκίμασα επίσης να κάνω refresh μετά τα διαγραφή του DatagridView αλλά τζίφος. Τι φταίει; Έψαξα στο Internet αλλά δε μπορώ να βρω άκρη. Please help
  •  19-10-2006, 13:47 18821 σε απάντηση της 18819

    Απ: Διαγραφή row σε DatagridView

    Θα πρέπει να τις αφαιρέσεις από το DataTable που έχεις κάνει bind στο BindingSource. Για να το πετύχεις αυτό θα πρέπει στο DataGridView να έχεις βάλει και το PK ως hiden column. Θα ελέγχεις το dtView.columns("colDelete").rows(i).value = true, θα παίρνεις τιν τιμή του cell που έχει το PK από το ίδιο row και με αυτό θα ψάχνεις στο DataTable να βρεις το DataRow (find method) που σε ενδιαφέρει και κατόπιν θα το σβήνεις.
    Vir prudens non contra ventum mingit
  •  19-10-2006, 14:20 18826 σε απάντηση της 18819

    Απ: Διαγραφή row σε DatagridView

    Α! κατάλαβα τι εννοείς. Νόμιζα ότι ο τρόπος που χρησιμοποιώ για να γεμίσω το datagridview ήταν unbound method και δε το σκέφτηκα για αυτό και πήγα κατευθείαν να το σβήσω από το grid. Ok τώρα ευχαριστώ. Θα το δοκιμάσω το απόγευμα και θα γράψω αύριο τα αποτελέσματα.
  •  19-10-2006, 20:30 18845 σε απάντηση της 18826

    Απ: Διαγραφή row σε DatagridView

    Δέν ξέρω, άν μπορούν να σε βοηθήσουν δύο functions που υπάρχουν έτοιμες για το DataSet.

    H AcceptChanges() και η RejectChanges().

    Μπορείς δηλαδή να δηλώνεις το Commit ή το Rollback στην βάση σε κάποιο control ή μετά από σχετική ερώτηση προς τον χρήστη.

    Έτσι έχεις την δυνατότητα να διαχειριστείς οποιαδήποτε αλλαγή έχει δεχθεί κάποια εγγραφή και όχι μόνο το Delete.
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems