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

 

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

DataGridView Cell και Commit Changes

Îåêßíçóå áðü ôï ìÝëïò Azular. Τελευταία δημοσίευση από το μέλος KelMan στις 29-11-2007, 23:55. Υπάρχουν 6 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  24-11-2007, 18:20 37698

    DataGridView Cell και Commit Changes

    Έστω ότι σε ένα DataGridView κάνω editing ένα Cell. Για να περάσει η αλλαγή που έχω κάνει στο Cell πρέπει να κάνω κλίκ σε ένα άλλο Cell ή να πατήσω Enter. Έχω κάνει και ένα κουμπί που αποθηκευει τις αλλαγές στην Βάση δεδομένων. Αν όμως ένα χρήστης επεξεργαστεί το Cell χωρίς να κάνει κλικ σε άλλο cell δεν θα περάσει η αλλαγή στο Datasοurce και κατα συνέπεια το κουμπί αποθήκευσης λογικό είναι να μην αποθηκευσει αλλαγή στην βάση. Δοκίμασα να χρησιμοποιήσω το DataGridView.EndEdit() ή το DataGridView.CommitEdit(Windows.Forms.DataGridViewDataErrorContexts.Commit) αλλά δεν έγινε τίποτα.
    Καμία ιδέα πώς να περνάω την αλλαγή από το Cell στο Datasource χωρίς ο χρήστης να κάνει κλικ αλλού;
    Ευχαριστώ για το χρόνο σας!
  •  26-11-2007, 09:18 37709 σε απάντηση της 37698

    Απ: DataGridView Cell και Commit Changes

    Δοκίμασε στο CellValidated να κάνεις DataGridView.EndEdit(). To CellValidated τρέχει οποτεδήποτε πάει να φύγει το focus από το τρέχον κελί. Απλά, βάλε συνθήκη ώστε να εκτελείται το EndEdit μόνο όταν βρίσκεσαι στο ανάλογο DataColumn. 


    Vir prudens non contra ventum mingit
  •  26-11-2007, 17:14 37728 σε απάντηση της 37709

    Απ: DataGridView Cell και Commit Changes

    Απ'ότι κατάλαβα το CellValidated Event συμβαίνει όταν ο χρήστης κάνει κλίκ σε άλλο κελί, κάτι που εμένα δεν με βολέυει αφού ο χρήστης μπορεί να κάνει κλικ στο κουμπί αποθήκευσεις χωρίς να έχει κάνει κλικ σε άλλο cell ώστε να πάψει το editing στο τρέχον κελί.Αυτό που κάνω προς το παρόν είναι όταν ο χρήστης κάνει κλικ στο κουμπί Αποθήκευσης, να ορίζεται σαν τρέχον κελι το πρώτο ορατό κελί μου. Έτσι κλείνει το editing σε οποιο κελί είναι ο χρήστης αφού τον πηγαίνει στο πρώτο ορατό, περνιούνται κατά συνέπεια οι αλλαγές στο datasource και μετά κάνω αποθήκευση στην Βάση Δεδομένων.Άλλες ιδέες λιγότερο μπακαλίστικες;

    δηλ. κάνω
    DataGridView.CurrentCell = DataGridViewEidos.Rows(0).Cells(1) 

  •  27-11-2007, 16:14 37768 σε απάντηση της 37728

    Απ: DataGridView Cell και Commit Changes

    Χρησιμοποίησες την λέξη DataSource και αν κατάλαβα καλά μάλλον χρησιμοποιείς Binding για να γεμίσεις το Grid με δεδομένα.

    Αν ναι τότε στον κώδικα του Button γράψε :

    Me.Validate

    Me.<BindingSource>.EndEdit

    'Execute rest code

    Αν όμως δεν χρησιμοποιείς Binding τότε ένας από του τρόπους που σου έχει προταθεί είναι σωστός. Τώρα μπορεί να υπάρχουν και άλλες υλοποιήσεις αλλά νομίζω πως θα είναι μπακαλίστικες αντιθέτως αυτός που σου έχει προταθεί είναι ο πιο σωστός (Κατά την γνώμη μου)

  •  28-11-2007, 09:47 37800 σε απάντηση της 37728

    Απ: DataGridView Cell και Commit Changes

    To CellValidated τρέχει οποτεδήποτε φεύγει το focus από το τρέχον κελί, είτε για να πάει σε άλλο κελί, είτε για να πάει σε άλλο control.
    Vir prudens non contra ventum mingit
  •  29-11-2007, 19:24 37863 σε απάντηση της 37800

    Απ: DataGridView Cell και Commit Changes

    Παιδιά δοκιμάζω το εξής σαν test για να καταλάβω την σειρά με την οποία συμβαίνουν τα πράγματα.

    Στο datadridview CellValidated event βάζω τo datadridview.EndEdit() και ένα απλό Messagebox

    -Κάνω edit σε ένα κελί (βγαίνει το μολυβάκι αριστερα στο datagridview,ενδειξη ότι κάνω editing)
    - Πατάω το κουμπί "Αποθήκευση", τρέχει ο κώδικας αποθήκευσης στην Βάση Δεδομένων
    -Και ύστερα ενεργοποιείται το CellValidated event του datadridview , όπου παράλληλα εμφανίζεται το μήνυμα του Messagebox αλλά και το μολυβάκι μετατρέπεται σε βελάκι.

    Δηλαδή απ'ότι κατάλαβα πρώτα συμβαίνει το Button_Click event και μετά το CellValidated event. Έτσι δεν με βολέυει όμως γιατί πρώτα γίνεται η αποθήκευση στην βάση και μετά περνάνε οι τιμές από το Cell στο Datatable.
    Δεν χρησιμοποιώ bindingsource αλλα Datatable για το Datasource του Datagridview (DataGridView.DataSource = ds.Tables(Table))
    Ευχαριστώ πάντως για την καθοδήγηση και τις συμβουλές.

  •  29-11-2007, 23:55 37873 σε απάντηση της 37863

    Απ: DataGridView Cell και Commit Changes

    Κάτι δεν πάει καλά με τον κώδικά σου... Αυτό αποκλείεται να συμβαίνει. Πρώτα εκτελείται το Cell_Validating, μετά το Cell_Validated και μετά οποιοδήποτε άλλο event. Δοκίμασε ένα νέο project. Βάλε ένα DataGridView με ένα unbound column και ένα κουμπί. Βάλε ένα Debug.WriteLine() σε κάθε event για να δεις τι εμφανίζει στο Immediate Window.


    Vir prudens non contra ventum mingit
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems