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

 

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

NullReferenceEcxeption κατά την απόκρυψη στήλης σε DataGridView

Îåêßíçóå áðü ôï ìÝëïò avlas. Τελευταία δημοσίευση από το μέλος Markos στις 09-01-2009, 02:08. Υπάρχουν 4 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  05-01-2009, 20:19 47451

    NullReferenceEcxeption κατά την απόκρυψη στήλης σε DataGridView

    Αγαπητοί φίλοι και φίλες γειά σας, Χρόνια πολλά σε όλους και το 2009 ας φέρει στο καθένα μας αυτό που επιθυμεί.

    Το πρόβλημα που αντιμετωπίζω είναι το εξής: Σε VB 2005 έχω σε μια φόρμα μεταξύ άλλων και ένα DataGridView στο οποίο φέρνω από μια βάση σε SQL 2005, το ιστορικό της αλλαγής των τιμών σε τιμοκαταλόγους. Για να είναι οπτικά καλύτερο το αποτέλεσμα, όπου υπάρχει υποτίμηση ή ανατίμηση αλλάζω το χρώμα της γραμμής και εμφανίζω και ένα αντίστοιχο εικονίδιο. Αυτά γίνονται με βάση τις τιμές που έχει μία από τις στήλες που φέρνω από τον πίνακα. Αυτή τη στήλη κατόπιν την αποκρύπτω. Όλο αυτό δουλεύει καλά όταν η εφαρμογή τρέχει στο τοπικό δίκτυο. Υπάρχει η ανάγκη όμως η εφαρμογή να εκτελείται και σε απομακρυσμένα σημεία, τα οποία έχουν πρόσβαση στον SQL SERVER μέσω VPN. Όταν λοιπόν η εφαμοργή "βλέπει" τη βάση από μακριά κατά την απόκρυψη της εν λόγω στήλης, μου δημιουργεί NullReferenceEcxeption. Θα πρέπει να σημειώσω πως κατά τα άλλα λειτουργεί κανονικά.

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

    Τέλος θα ήθελα να σας ευχαριστήσω για την πολύ καλή δουλειά που κάνετε και βοηθάτε και εμάς τους αρχάριους, να'στε καλά.


    "We appeal as human beings to human beings: Remember your humanity, and forget the rest." - Russell-Einstein Manifesto
  •  05-01-2009, 23:35 47452 σε απάντηση της 47451

    Απ: NullReferenceEcxeption κατά την απόκρυψη στήλης σε DataGridView

    Δεν έχει καμμία σημασία αν η βάση βρίσκεται σε άλλο υπολογιστή. Για το ADO.NET είναι το ίδιο είτε η βάση βρίσκεται στον ίδιο είτε σε διαφορετικό υπολογιστή. Η καθυστέρηση μπορεί να οφείλεται επειδή μεταφέρεις πολλά δεδομένα, επειδή έχεις χαμηλή ταχύτητα σύνδεσης, ή επειδή τραβάς τα δεδομένα με αργό τρόπο.

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


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  07-01-2009, 11:46 47475 σε απάντηση της 47452

    Απ: NullReferenceEcxeption κατά την απόκρυψη στήλης σε DataGridView

    Παναγιώτης Καναβός:

    Δεν έχει καμμία σημασία αν η βάση βρίσκεται σε άλλο υπολογιστή. Για το ADO.NET είναι το ίδιο είτε η βάση βρίσκεται στον ίδιο είτε σε διαφορετικό υπολογιστή. Η καθυστέρηση μπορεί να οφείλεται επειδή μεταφέρεις πολλά δεδομένα, επειδή έχεις χαμηλή ταχύτητα σύνδεσης, ή επειδή τραβάς τα δεδομένα με αργό τρόπο.

    Ναι το νγωρίζω. Και στις δύο περιπτώσεις η βάση βρίσκεται σε άλο υπολογιστή, σε server. Απλά στη μια περίπτωση όπου εκτελείται κανονικά, ο υπολογιστής που "τρέχει" την εφαρμογή είναι στο ίδιο δίκτυο με τον server (local), ενώ στην άλλη "βλέπει" το server από απομακρυσμένο σημείο μέσω Internet, με VPN. Σε ότι αφορά τα δεδομένα, αυτά είναι πολύ λίγα 2 έως 3 γραμμές του DataGridView.

    Παναγιώτης Καναβός:

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

    Ο κώδικας με τον οποίο γίνεται η συγκεκριμένη εργασία που προαναφέρω είναι ο εξής:

    (Γέμισμα του dataGridView, εννοείται ότι έχουν γίνει οι σχετικές δηλώσεις των μεταβλητών, ότι το StoreProcedure εκτελείται κανονικά κλπ, εξάλου το παρακάτω λειτουργεί στην περίπτωση που προαναφέρω)

         commandUPDTS.Connection = connectionString
         commandUPDTS.CommandText = "PriceListUpdatesSTPR"
         commandUPDTS.CommandType = CommandType.StoredProcedure
         commandUPDTS.Parameters.Add("@ModelCode", SqlDbType.VarChar).Value = ModelCode

         commandUPDTS.Connection.Open()
         adapter.Fill(ds)
         command.Connection.Close()
         PriceListChangesDtGrdView.DataSource = ds.Tables(0).DefaultView

            ' Initialize the images.
            Try
                PriceUp = New Bitmap(My.Resources.ArrowUP)
                PriceSteady = New Bitmap(My.Resources.Steady)
                PriceDown = New Bitmap(My.Resources.ArrowDown)
            Catch ex As ArgumentException
                MessageBox.Show("The Priority column requires Bitmap images" & _
                    "named highPri.bmp, mediumPri.bmp, and lowPri.bmp " & _
                    "residing in the same directory as the executable file.")
            End Try


            ' Prosthiki Stilis
            If NewColumnsExists = False Then
                AddCollumnToDtGrdView()
            End If

    (Αφού γεμίσω το DataGridView τότε σύμφωνα με τις τιμές που έχουν οι στήλες "PVC_F" και "ALU_F" προσθέτω DataGridViewImageColumn και αποκρύπτω αυτές που δεν χρειάζομαι)

        Private Sub AddCollumnToDtGrdView()

            Dim NewColPVC As New DataGridViewImageColumn
            With NewColPVC
                .Name = "PVC"
                .DataPropertyName = "PVC"
                .HeaderText = "PVC"
                .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
            End With
            PriceListChangesDtGrdView.Columns.Insert(0, NewColPVC)
            PriceListChangesDtGrdView.Columns("PVC_F").Visible = False   ----> Το πρόβλημα εμφανίζεται εδώ

            Dim NewColALU As New DataGridViewImageColumn
            With NewColALU
                .Name = "ALU"
                .DataPropertyName = "ALU"
                .HeaderText = "ALU"
                .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
            End With
            PriceListChangesDtGrdView.Columns.Insert(3, NewColALU)
            PriceListChangesDtGrdView.Columns("ALU_F").Visible = False   ----> Και εδώ


            NewColumnsExists = True


        End Sub

    Και επαναλαμβάνω και πάλι ότι εμφανίζεται μόνο όταν εκτελείται από απομακρυσμένο σημείο και μέσω VPN...

    Ευχαριστώ και πάλι

     


    "We appeal as human beings to human beings: Remember your humanity, and forget the rest." - Russell-Einstein Manifesto
  •  09-01-2009, 01:33 47528 σε απάντηση της 47475

    Απ: NullReferenceEcxeption κατά την απόκρυψη στήλης σε DataGridView

    Σχετικά με το αρχικό σου ερώτημα το να καθυστερήσεις την εκτέλεση του κώδικα μέχρι να έρθουν τα δεδομένα δεν ισχύει. Αν δεν έχεις δημιουργήσει άλλο Thread που να σου φέρει τα δεδομένα τότε η κάθε γραμμή στο πρόγραμμα σου θα εκτελείτε αφού έχει πρώτα τελειώσει η προηγούμενη. Οπότε στην adapter.Fill(ds) ο κώδικάς σου θα προχωρήσει παρακάτω αφού πρώτα έχεις πάρει τα δεδομένα.

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

    Αν το βρεις γράψε πίσω να μάθω τι έφταιγε.


     

  •  09-01-2009, 02:08 47529 σε απάντηση της 47475

    Απ: NullReferenceEcxeption κατά την απόκρυψη στήλης σε DataGridView

    Αντιγράφω από το MSDN για τη Visible property του DataGridViewColumn:

    To hide a column that is automatically generated when binding to a data source, set this property in a DataBindingComplete event handler.

    Δε χάνεις τίποτα να το δοκιμάσεις.


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