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

 

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

DataGridView Update...

Îåêßíçóå áðü ôï ìÝëïò Τάσκος Γιώργος. Τελευταία δημοσίευση από το μέλος Τάσκος Γιώργος στις 20-10-2008, 22:05. Υπάρχουν 14 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  19-10-2008, 21:00 45589

    DataGridView Update...

    Καλησπέρα,

    Έχοντας βάλει σε μια μέθοδο τα ακόλουθα,

    OleDbDataAdapter detailsAdapter = new OleDbDataAdapter(query, connString)
    DataSet detailsDataSet = new DataSet();
    OleDbCommandBuilder cBuilder = new OleDbCommandBuilder(detailsAdapter);
    BindingSource bSource = new BindingSource();
    bSource.DataSource = detailsDataSet;
    DetailsDataGridView.DataSource = bSource;
    detailsAdapter.Fill(detailsDataSet);
    DetailsDataGridView.DataSource = detailsDataSet.Tables[0].DefaultView;


    Μάλλον πρέπει να σημειώσω ότι το query το παίρνει από μια άλλη κλάση που γίνεται
    instantiate και τρέχει μία μέθοδο.

    DataSrcs d = new DataSrcs();
    string Query = d.DetailsQuery(ContactIdTextBox.Text);


    Για προφανής λόγους όπως βλέπεται.

    Τα υπόλοιπα της μεθόδου δεν έχουν σημασία νομίζω, όλα δουλεύουν έτσι όπως θέλω,
    αλλά όταν θα θέλω να βάλω τώρα π.χ. εγώ το,

    detailsAdapter.Update(detailsDataSet);

    σε κάποιο κουμπί, αρχίζει και μπερδεύει η σχεδίαση του κώδικα, και οι αλλαγές φένονται αρκετές.
    Φυσικά και δεν βρίσκει Adapter και DataSet. Αν τα δηλώσω πάνω στην κλάση δεν έχω τα αποτελέσματα που θέλω.
    π.χ θα μπορούσα επίσης να το βάλω στον RowChange handler αλλά και πάλι είναι εκτός της μεθόδου.

    Πώς το διορθώνω? ή που το βάζω?, πρέπει να αλαχτεί η σχεδίαση της εφαρμογής? από ότι παιδευτικά
    δεν νομίζω οτί αυτή είναι η λύση.




  •  19-10-2008, 23:08 45592 σε απάντηση της 45589

    Απ: DataGridView Update...

    Δεν μπορώ να πω ότι κατάλαβα που είναι το πρόβλημα που αντιμετωπίζεις... Υποπτεύομαι ότι έχει να κάνει με το scope των αντικειμένων που χρησιμοποιείς αλλά καλύτερα να εξηγήσεις λίγο περισσότερο το πρόβλημα.


    Vir prudens non contra ventum mingit
  •  19-10-2008, 23:24 45593 σε απάντηση της 45592

    Απ: DataGridView Update...

    Δεν έχω πρόβλημα ακριβώς....

    Θέλω όμως το DetailsDataGridView να γίνεται update στην βάση μετά από
    αλλαγές ή προσθέσεις γραμμών.

    Αυτό!

    Από ότι εψαξα και διάβασα είδα ότι μπορώ να το καταφέρω με αυτή την εντολή.

    detailsAdapter.Update(detailsDataSet);


  •  20-10-2008, 15:01 45603 σε απάντηση της 45593

    Απ: DataGridView Update...

    Για να λειτουργεί "αυτόματα" η εντολή

    dataAdapter.Update(dataSet, "Tablename");

    πρέπει να έχεις σετάρει κάπου το updateCommand, με τις παραμέτρους του, το connection που θα χρησιμοποιεί κλπ.

    Αν θες πες μου να σου δώσω ένα παράδειγμα κώδικα.

  •  20-10-2008, 15:12 45606 σε απάντηση της 45603

    Απ: DataGridView Update...

    Και φυσικά θα ήθελα ένα παραδειγμα.

    Ευχαριστώ!

  •  20-10-2008, 15:27 45608 σε απάντηση της 45606

    Απ: DataGridView Update...

    Συνημμένα: Contact.rar

    Στο έχω συννημένο, να' σαι καλά.

  •  20-10-2008, 16:22 45612 σε απάντηση της 45608

    Απ: DataGridView Update...

    Η βάση δεν είναι SQL αλλά το παραδειγμά σου μου έδωσε πολλά, και θα το μελετήσω και για άλλα Projects,
    κατάλαβα όμως τι ήθελε και ότι κάνοντας new με τα ίδια Query και Connection String, έβαλα,

                DataSrcs d = new DataSrcs();
                string Query = d.DetailsQuery(ContactIdTextBox.Text);
                OleDbDataAdapter detailsAdapter = new OleDbDataAdapter(Query, Properties.Settings.Default.basedbConnectionString);
                OleDbCommandBuilder cBuilder = new OleDbCommandBuilder(detailsAdapter);

                detailsAdapter.Update(detailsDataSet);

    μέσα στην μέθοδο του Button_Click και παίζει!

    Χαλάει τώρα στην εισαγωγή γραμμής, με το δίκιο του γιάτι έχω κρυμμένο Column που απαιτείται από την βάση.
    Θα βρώ ένα τρόπο να του δίνω Default Value και θα είναι ΟΚ. Ευχαριστώ!

  •  20-10-2008, 16:28 45613 σε απάντηση της 45612

    Απ: DataGridView Update...

    Ναι, αυτό το style στο παράδειγμα που σου έδωσα το χρησιμοποιώ και γω για όλα τα projects.

    Good working!

  •  20-10-2008, 16:35 45614 σε απάντηση της 45613

    Απ: DataGridView Update...

    Βάζω Default Value αλλά πάλι με χτυπάει....

    Για να μου φύγει η απορία, η εντολή Update από ότι έχω δεί,
    κάνει και για Insert και για Delete, η θέλει αλλους ελεγχους και
    Commands για τα συγκεκριμένα?

    [EDIT]

    Όλα ΟΚ δικιά μου βλακεία είχα ξεχάσει ένα πεδίο να απαιτείται!!

    Thanx :)

  •  20-10-2008, 16:46 45616 σε απάντηση της 45614

    Απ: DataGridView Update...

    Στο αρχείο που σου έδωσα γίνεται set και των τριών εντολών (insert, update, delete). Για να κάνεις delete ή insert πρέπει να αρχικοποιήσεις και τα δύο commands. Η υλοποίηση που σου έδωσα είναι σε SQL Server, αλλά παρόλαυτα μπορείς εύκολα να το αλλάξεις σε OleDB.

  •  20-10-2008, 16:51 45618 σε απάντηση της 45616

    Απ: DataGridView Update...

    To OleDbCommandBuilder cBuilder = new OleDbCommandBuilder(detailsAdapter);
    τακτοποιεί και της τρείς αλλαγές μόνο του, καλό ε!

    Νιώθεις λίγο σαν να μην έκανες αρκετά, αλλά αφού υπάρχει.

  •  20-10-2008, 17:02 45620 σε απάντηση της 45618

    Απ: DataGridView Update...

    Όταν λες τακτοποιεί και τις 3 αλλαγές μόνο του τι εννοείς; Βάση του κώδικα που σου έδωσα;

    Να σου πω την αλήθεια δεν θυμάμαι να το έχω χρησιμοποιήσει καμμια φορά.

  •  20-10-2008, 19:12 45621 σε απάντηση της 45620

    Απ: DataGridView Update...

    Αν χρησιμοποιήσεις OLEDB, μπορείς μέσω του CommandBuilder
    να κάνεις Update,Insert και Delete σε ένα DataGridView,
    Ασχέτως τις αλλαγές που έχεις κάνει στο Grid. Δεν χρειάζεται
    δηλαδή, να γράψεις διαφορετικά Query για κάθε ενέργεια του
    GridView. Στην ουσία κάνει την δουλεια που κάνει και το SqlDataAdapter,
    για SQL Databases.

  •  20-10-2008, 21:43 45625 σε απάντηση της 45621

    Απ: DataGridView Update...

    H χρήση του CommandBuilder έχει μερικά βασικά μειονεκτήματα. Αν ψάξεις στο dotNETZone θα βρεις αρκετές αναφορές (πχ http://www.dotnetzone.gr/cs/forums/post/9689.aspx)

    Από εκεί και πέρα, το βασικότερο θέμα κατά το Update είναι τα conflicts. Δεν γνωρίζω τι εφαρμογή κατασκευάζεις αλλά με το απλό implementation τύπου "datasetX.Update" είναι σίγουρο ότι θα έχεις exceptions όταν τρέξει κάποιος την εφαρμογή σου σε δίκτυο και η βάση χρησιμοποιείται ταυτόχρονα από πολλούς χρήστες. Δες εδώ http://www.dotnetzone.gr/cs/blogs/mkelaiditis/archive/2006/02/20/9899.aspx μια περιγραφή και τρόπους αντιμετώπισης του προβλήματος. Δυστυχώς το πρώτο μέρος του άρθρου έχει χαθεί...

     


    Vir prudens non contra ventum mingit
  •  20-10-2008, 22:05 45626 σε απάντηση της 45625

    Απ: DataGridView Update...

    Μάνο, διάβασα σήμερα και αυτό... http://msdn.microsoft.com/en-us/library/ms971491.aspx

    Επίσης αναλύει τα μειονεκτήματα του commandbuilder....
    Δεν κάνω τίποτα ιδιαίτερο,όχι δικτυακο σίγουρα. Κάτι απλά σε Access,
    για να δώ μερικά πράγματα στην πράξη.

    Δεν έχω φτάσει σε επίπεδο σοβαρό, ειμαι πολύ LowLevel ακόμα, αλλά λαμβάνω υπόψην
    ότι μου λένε επαγγελματίες πάντα. Θα μελετήσω τις βάσεις καλύτερα στο μέλλον, για την
    ώρα νομίζω ότι δεν θα έχω πρόβλημα να την χρησιμοποιήσω, άλλωστε
    δεν νομίζω να χρησιμοποιήσω Access ξανά.

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