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

 

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

Πρόβλημα με ComboBox πάνω σε DataGridView

Îåêßíçóå áðü ôï ìÝëïò PanPan. Τελευταία δημοσίευση από το μέλος kallileo στις 27-02-2008, 14:37. Υπάρχουν 9 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  26-02-2008, 10:47 40499

    Πρόβλημα με ComboBox πάνω σε DataGridView

    Καλημέρα.

    Αντιμετωπίζω το εξής πρόβλημα: Έχω ένα datagridview πάνω σε μια φόρμα. (Δουλεύω με VB2005 & SQL2000.) Κάποια από τα πεδία κάνουν lookup σε άλλους πίνακες, έτσι αντί να εμφανίζονται ως datagridviewtextboxcolumn (ColumnType) έχω προσθέσει manually datagridviewcomboboxcolumn, το οποίο έχω κάνει bind με την βάση.

    Π.χ. το πεδίο fItemID έχει DataPropertyName: fItemID

                                         DataSource: EDGItemsBindingSource (που είναι ο πίνακας που κάνει lookup)

                                         DisplayMember: Code

                                         ValueMember: ID

    Όταν τρέχω την εφαρμογή μου παίρνω το μήνυμα "The following exception occurred in the DataGridView: System.ArgumentException: DataGridViewComboBoxCellValue is not valid. To replace this default dialog please handle the DataError event." Αυτό που καταλαβαίνω από το συγκεκριμένο μήνυμα είναι ότι δεν αντιλαμβάνεται την τιμή που έχει το πεδίο και επιστρέφει nothing πάνω στο comboboxcell. Πιστεύω πως δεν έχει να κάνει με το parsing, μια και τα data type είναι σωστά (valuetype πάνω στο datagridviewcell).

    Κάνω handle λοιπόν το συγκεκριμένο event και πλέον παίρνω το μήνυμα "Error happened Formatting, Display". Να σημειώσω εδώ πως έχω αλλάξει το AutoSizeMode από None σε NotSet, σύμφωνα με λύσεις που έχουν δώσει στο msdn προγραμματιστές που είχαν παρόμοια προβλήματα. Τι άλλω να κάνω πια για να ξεπεράσω το πρόβλημα; Ταλαιπωρούμαι αρκετά από αυτό το μήνυμα και ήδη έχω αναλώσει αρκετό χρόνο. Έχετε καμιά ιδέα; Έχετε αντιμετωπίσει παρόμοιο πρόβλημα; Και τι κάνατε για να το ξεπεράσετε στην συγκεκριμένη περίπτωση;


    "Μη σταματάς να αναζητάς αυτό που αγαπάς, ειδάλλως θα καταλήξεις να αγαπάς ό,τι βρίσκεις." (Αγνώστου)
  •  26-02-2008, 11:06 40501 σε απάντηση της 40499

    Απ: Πρόβλημα με ComboBox πάνω σε DataGridView

    Κοίταξε (με query απευθείας στη βάση) για τη συγκεκριμένη εγγραφή που σου χτυπάει, ποιά είναι η lookup τιμή. Μήπως δεν υπάρχει στον lookup πίνακα; Ή μήπως είναι null το display value;


    Vir prudens non contra ventum mingit
  •  26-02-2008, 12:21 40504 σε απάντηση της 40501

    Απ: Πρόβλημα με ComboBox πάνω σε DataGridView

    Η τιμή υπάρχει στην βάση, μια και είναι το πρώτο πράγμα που έλεγξα. Υποψιάζομαι το τελευταίο, αλλά μέχρι στιγμής αυτό που έκανα δεν με βοήθησε. Χρησιμοποιήσα το CellFormatting event για να ρωτήσω για το τι τιμή έχει το value property του column, αλλά δεν βλέπω να παίζει.... Σας παραθέτω κώδικα:

    If Me.EDTStockLineItemDataGridView.Columns(e.ColumnIndex).Name = "ItemIDCombo" Then

    MsgBox(Me.EDTStockLineItemDataGridView.Columns(e.ColumnIndex).CellType.ToString)

    Dim value As String = TryCast(e.Value, String)

    Try

    If value IsNot Nothing And value.Equals(e.CellStyle.DataSourceNullValue) Then

    e.Value = e.CellStyle.NullValue

    e.FormattingApplied = True

    End If

    Catch ex As Exception

    MsgBox(ex.Message.ToString)

    End Try

    End If


    "Μη σταματάς να αναζητάς αυτό που αγαπάς, ειδάλλως θα καταλήξεις να αγαπάς ό,τι βρίσκεις." (Αγνώστου)
  •  26-02-2008, 12:32 40505 σε απάντηση της 40504

    Απ: Πρόβλημα με ComboBox πάνω σε DataGridView

    Είδες κατευθείαν πάνω στη βάση τις τιμές;


    Vir prudens non contra ventum mingit
  •  26-02-2008, 12:55 40506 σε απάντηση της 40505

    Απ: Πρόβλημα με ComboBox πάνω σε DataGridView

    Ναι.

    Το θέμα είναι ότι το value μου το επιστρέφει nothing, κάτι που δεν το καταλαβαίνω, μια και έχει τιμές. Δεν ξέρω τι φταίει κατα το format. Δεν πιστεύω πως είναι θέμα parsing, μια και οι τύποι είναι σωστοί.....

     

    Κάτι ανάλογο είχα αντιμετωπίσει πρόσφατα, αλλά το είχα αφήσει προσωρινά για να προσχωρήσω παρακάτω. Όμως το ξανασυνάντησα... :( Δες εδώ


    "Μη σταματάς να αναζητάς αυτό που αγαπάς, ειδάλλως θα καταλήξεις να αγαπάς ό,τι βρίσκεις." (Αγνώστου)
  •  26-02-2008, 14:51 40513 σε απάντηση της 40506

    Απ: Πρόβλημα με ComboBox πάνω σε DataGridView

    Είχα δει το project αλλά δεν ασχολήθηκα γιατί αφενός δεν είχα τη βάση σου, αφετέρου δεν προσδιορίζεις που ακριβώς βρίσκεται το πρόβλημα. Γενικά, προσπάθησε στις ερωτήσεις σου να είσαι σαφής και να βοηθάς αυτόν που σου απαντάει καθώς είναι εξαιρετικά δύσκολο να "μπούμε" στο περιβάλλον σου. Όταν είπα για sample δεν εννούσα να ανεβάσεις όλο το project σου αλλά να φτίαξεις ένα δείγμα με παρόμοια data που να βασίζεται σε κάποια βάση που σχεδόν όλοι έχουν, όπως η Northwind, η Pubs ή η AdventureWorks. Κάνοντας αυτό, όχι μόνο δίνεις στους άλλος τον τρόπο για να υπάρξει μια κοινή βάση συνεννόησης, αλλά απομονώνεις το πρόβλημα και αποκτάς μια πιο μεθοδευμένη διαδικασία για να ανακαλύπτεις τα προβλήματα. Ενδεχομένως ακόμη και να λύσεις το πρόβλημα απλά απομονώνοντας το και επικεντρώνοντας εκεί την προσοχή.

     


    Vir prudens non contra ventum mingit
  •  26-02-2008, 15:32 40516 σε απάντηση της 40513

    Απ: Πρόβλημα με ComboBox πάνω σε DataGridView

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

    Δεν επέλεξα μια κοινή βάση που την έχουν όλοι, για το λόγο ότι τα πεδία στην Northwind λόγου χάρη (αν πάρουμε τους πίνακες Customers και Orders) δεν ήταν not null όπως συνέβαινε με τα δικά μου πεδία (foreign keys & Identity) και δεν θα περίμενα να σκαλίσει κανείς την βάση αυτή για να προσομοιώσει το δικό μου παράδειγμα. Επομένως ανέβασα ένα sample με τους δικούς μου πίνακες (και όχι όλη την εφαρμογή μου) για να δείξω πως καλώ την κάθε φόρμα και τι έχω κάνει εκεί, έστω και αν ρίσκαρα να δείξω "ευαίσθητα" δεδομένα.

    Το πρόβλημα εστιάζεται σε 3 σημεία. Πρώτο είναι ότι όταν η φόρμα καλείται μόνη της (τα παραστατικά από το μενού Κινήσεις--> Αγορές δεν μπαίνει σε AddNew, ενώ βάσει του κώδικά μου θα έπρεπε, γιατί εκεί ο χρήστης περιμένει να ανοίξει η φόρμα για να καταχωρήσει εγγραφή χωρίς να του δείξει όλες τις εγγραφές.

    Το δεύτερο είναι ότι όταν η φόρμα καλείται από το μενού Λίστες--> Αγορές και εκεί κάνει double click στο datagridview για την εγγραφή που τον ενδιαφέρει, ανοίγει η φόρμα (η κύρια που υπάρχει στο μενού Κινήσεις--> Αγορές)  για να του δείξει με λεπτομέρεια την εγγραφή. Εκεί έχω το πρόβλημα με το DataDridViewComboBoxCell, όπου δεν μου εμφανίζει τις τιμές που έχω στην βάση και παίρνω το μήνυμα για το DataGridViewComboBoxCellValue is not valid. Θεωρώ πως κάτι συμβαίνει με τον κώδικά μου, γιατί αν απλά βάλλω εκείνο το datagridview σε μια άλλη νέα φόρμα για test με τα comboboxes, οι τιμές εμφανίζονται μια χαρά σε αυτές τις κολώνες του grid.

    Ένα τρίτο πρόβλημα είναι οι υπολογισμοί, οι οποίοι δεν θέλω να γίνονται άπαξ, αλλά μόνο όταν κάποιος τροποποιήσει κάποια εγγραφή και όχι όταν καλείται η φόρμα για να μου δείξει τα δεδομένα από την βάση. Αν το αφήσω αυτό να γίνεται κάθε φορά και αφού τα πεδία υπολογίζονται βάσει του κώδικα που έχω γράψει στην RowChanged και TableNewRow γίνεται ένα μικρό μπάχαλο, γιατί εκεί που πάει να δείξει κάποια υπάρχουσα εγγραφή αρχίζουν και παίζουν default τιμές και ξαναυπολογίζονται όλα τα πεδία.

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


    "Μη σταματάς να αναζητάς αυτό που αγαπάς, ειδάλλως θα καταλήξεις να αγαπάς ό,τι βρίσκεις." (Αγνώστου)
  •  27-02-2008, 10:32 40542 σε απάντηση της 40516

    Απ: Πρόβλημα με ComboBox πάνω σε DataGridView

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


    Vir prudens non contra ventum mingit
  •  27-02-2008, 11:08 40544 σε απάντηση της 40542

    Απ: Πρόβλημα με ComboBox πάνω σε DataGridView

    Μάνο, έχεις απόλυτο δίκιο σε αυτό που λες. Αυτό έχω αρχίσει να κάνω. Να επιμερίζω δηλ. το πρόβλημά μου σε κομμάτια, για να μπορέσω να βρω λύση.

    Ήδη κατάλαβα γιατί λαμβάνω το μήνυμα "DataGridViewComboBoxCell value is not valid" και επομένως τα comboboxes έχουν την τιμή nothing. Δεν φορτώνει καθόλου τις εγγραφές αυτού του πίνακα (που είναι ο detail), όταν καλώ την εν λόγω φόρμα από μια άλλη που χρησιμοποιείται ως όψη και δείχνει όλες τις εγγραφές του master table. Όταν δηλαδή κοίταξα τι φορτώνει το DataSet είδα πως δεν έρχονται καθόλου οι εγγραφές του detail πίνακα που απεικονίζεται ως grid στην φόρμα μου.

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


    "Μη σταματάς να αναζητάς αυτό που αγαπάς, ειδάλλως θα καταλήξεις να αγαπάς ό,τι βρίσκεις." (Αγνώστου)
  •  27-02-2008, 14:37 40549 σε απάντηση της 40544

    Απ: Πρόβλημα με ComboBox πάνω σε DataGridView

    Ειχα το ιδιο προβλημα πριν μερικες μερες με ενα gridview που δημιουργησα. Αφου το εψαξα στο internet ειδα οτι πολυς κοσμος εχει το προγραμμα που περιγραφεις. Προσωπικα το ελυσα χωρις ιδιος να καταλαβω πως...απλα παιζοντας με τις ρυθμισεις του wizard. Επισης ο πινακας(οχι αυτος που διαβαζε τιμες το ComboBox) απο οπου διαβαζε τις τιμες το DataGridView πινακας περιειχε εγγραφες το comboBox πεταγε το exception...Αν ομως ο πινακας ηταν αδειος και προσθετα τις τιμες στον πινακα αυτον απο το datagridview...το comboBox δουλευε κανονικα και γενικα εκανε διαφορα τρελα.
    Δες και το thread στο codeproject:
     
    Επισης εδω φαινεται οτι καποιοι εχουν βρει μια λυση(δες στο τελος):
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems