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

 

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

Master - Detail DataGridview (VB 2005)

Îåêßíçóå áðü ôï ìÝëïò neoklis. Τελευταία δημοσίευση από το μέλος neoklis στις 13-11-2009, 11:04. Υπάρχουν 5 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  12-11-2009, 12:58 55128

    Master - Detail DataGridview (VB 2005)

    Καλημέρα,

     

    Έχω δημιουργήσει ένα dataset με δύο πίνακες και έχω δημιουργήσει και ένα relation με τρια κλειδιά. Έχω επίσης ένα textbox, δύο radiobutton σε ένα groubox και δύο datagridviews τα οποία θέλω να λειτουργουν ως master-detail.

     

    Εισάγοντας τιμές για textbox και radiobutton, φιλτράρονται κάποιες εγγραφές και εμφανίζονται στο MasterDgv.

    Me.PPDGR_DelayDataGridView.DataSource = Me.PPDGR_DelayBindingSource

    Me.PPDGR_DelayTableAdapter.Fill(Me.SOLTESTDataSet.PPDGR_Delay)

    Me.PPDGR_DelayBindingSource.Filter = "Date='" & Format(Me.date_.Text) & "'" & " And Machine='" & GetMhx() & "'"

    Κατόπιν κάνοντας κλικ σε ένα row σε οποιοδήποτε collumn του MasterDgv θέλω να εφανίζονται οι αντίστοιχες εγγραφές για το DetailDgv. Το event που χρησιμοποιώ είναι το CellContentClick αλλά κάνοντας κλικ μέσα σε κάποιο κελλί,

    Me.PPDGR_ApolipansiDataGridView.DataSource = Me.PPDGR_ApolipansiBindingSource

    Me.PPDGR_ApolipansiTableAdapter.Fill(Me.SOLTESTDataSet.PPDGR_Apolipansi) - χτυπάει εδώ

    Βγάζει το εξής error:

     

    Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints.

     

    το relation του dataset που χρησιμοποιήσω είναι Both relation and Foreign Key Constraints. Δεν γωρίζω αν είναι το σωστό αλλά επειδή χρησιμοποιώ και πεδία τα οποία στον child πίνακα δεν είναι κλειδιά για αυτό το διάλεξα.

     

    Είναι η πρώτη φορά που ασχολούμαι με master-detail σε vb 2005, οποιαδήποτε συμβουλή είναι πολύτιμη.

     

    Ευχαριστώ.


    Dionisis
  •  12-11-2009, 13:37 55129 σε απάντηση της 55128

    Απ: Master - Detail DataGridview (VB 2005)


    κοίταξε λίγο τα data σου και δες μήπως έχεις 2 ή περισσότερα records, με την ίδια τιμή στο primary key.

    δες αυτό το video από beth massi για master detail σε winforms

    http://msdn.microsoft.com/en-us/vbasic/bb643827.aspx


    Νικόλαος Καντζέλης
    BSc, MSc, MCAS, MCPD, MCITP, MCTS,MCP, MCT
    http://www.nksolutions.gr
    http://dotnetstories.wordpress.com
    http://weblogs.asp.net/dotnetstories
    http://forum.dotnetnuke.gr
  •  12-11-2009, 14:05 55131 σε απάντηση της 55129

    Απ: Master - Detail DataGridview (VB 2005)

    Νικόλα το βιντεάκι είναι πάρα πολύ καλό...... Για να δούμε όμως τι ψάρια θα πιάσω...Geeked
    Dionisis
  •  12-11-2009, 14:13 55132 σε απάντηση της 55131

    Απ: Master - Detail DataGridview (VB 2005)

     

    δες και αυτό εδώ

    http://weblogs.asp.net/rosherove/archive/2004/10/03/DataSet-hell-_2D00_-_2200_Failed-to-enable-constraints.-One-or-more-rows--contain-values_2E002E002E002E002200_.aspx

    βασικά πρέπει να βρεις τον "ένοχο" και εδώ εξηγεί τι να κάνεις


    Νικόλαος Καντζέλης
    BSc, MSc, MCAS, MCPD, MCITP, MCTS,MCP, MCT
    http://www.nksolutions.gr
    http://dotnetstories.wordpress.com
    http://weblogs.asp.net/dotnetstories
    http://forum.dotnetnuke.gr
  •  12-11-2009, 14:43 55133 σε απάντηση της 55132

    Απ: Master - Detail DataGridview (VB 2005)

    Νικόλα έχεις δίκιο για τον "ένοχο". Το συνειδητοποίησα με το που είδα το βιντεάκι.. Καταλάβα ότι τα κλειδιά του child πινακα δεν ήταν σωστά.. Τα έφτιαξα και παίζει μια χαρά..! Έχω λίγο δρόμο ακόμα μπροστά μου αλλά το κυριότερο είναι ότι είμαι στον σωστό δρόμο..!

     

    Σ' ευχαριστώ


    Dionisis
  •  13-11-2009, 11:04 55157 σε απάντηση της 55133

    Απ: Master - Detail DataGridview (VB 2005)

    Συνηθισμένος από την Access όπου όποιες αλλαγές γίνονται σε ένα datasheet αποθηκεύονται στον πίνακα αυτόματα, είχα προσπαθήσει να βρω έναν τρόπο να αποθηκεύει αυτόματα τις αλλαγές και στην VB. Έτσι λοιπόν σε μία φόρμα με ένα datagridview, στο ListChanged Event του bindingsource, έλεγχα για αλλαγή στο dataset και έκανα true την τιμη μιάς μεταβλητής. Στο RowValitaded του datagridview έλεγχα την μεταβλητή και αποθήκευα όταν ήταν σκόπιμο.

     

    Προσπάθησα να εφαρμόσω το ίδιο και για master-detail αλλά χωρίς επιτυχία. Θέλω να ξέρω σε ποιόν πίνακα εκρεμμούν αλλαγές και να εκτελούνται μόνο για τον συγκεκριμένο. Έφτιαξα λοιπόν δύο μεταβλητές Pending Update για τους πίνακες μου και χρησιμοποίησα τα event που αναφέρω παραπάνω στα δύο bindingsources και datagridviews. Παρατήρησα ότι όταν κάνω κάποια αλλαγή π.χ. στον Master το ListChanged εκτελείται και για τα δύο bindingsource με αποτέλεσμα και οι δύο μεταβλητές να παίρνουν true και να μην παίρνω την πληροφορία που θέλω. Υπάρχει τρόπος να βρω σε ποιόν πίνακα εκρεμούν αλλαγές..;

     

    Το δεύτερο που δοκίμασα ήταν να έχω μία μεταβλητή Pending Update για τους πίνακες μου και καλώντας μία sub να αποθηκεύω και για τους δύο πίνακες.

     

    Private Sub SaveData()

          Me.Cursor = Cursors.WaitCursor

          Me.Validate()

          Me.PPDGR_DelayBindingSource.EndEdit()       

          Me.PPDGR_DelayTableAdapter.Update(Me.SOLTESTDataSet.PPDGR_Delay)

     

          Me.ValidateChildren() –χτυπάει εδώ

          Me.PPDGR_ApolipansiBindingSource.EndEdit()

          Me.PPDGR_ApolipansiTableAdapter.Update(Me.SOLTESTDataSet.PPDGR_Apolipansi)

          Me.Cursor = Cursors.Arrow

          Me.UpdatePending = False

    End Sub

     

    Το error

    An unhandled exception of type 'System.StackOverflowException' occurred in System.dll


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