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

 

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

Πρόβλημα με Datagridview Combobox column

Îåêßíçóå áðü ôï ìÝëïò constantine-55. Τελευταία δημοσίευση από το μέλος jtoutou στις 08-09-2009, 02:48. Υπάρχουν 18 απαντήσεις.
Σελίδα 1 από 2 (19 εγγραφές)   1 2 >
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  24-08-2009, 03:17 53245

    Πρόβλημα με Datagridview Combobox column

    Γειά σας

     

     

    Σε ένα dgv έχω 3 στήλες εκ των οποίον οι 2 είναι cmb και έχουν bindingsource

     

    Για κάθε cmb υπάρχει διαφορετικό DS

     

    CustomersBindingSource = πρώτο cmb

    ProjectsBindingSource = δεύτερο cmb

     

     

    Στην πρώτη στήλη εμφανίζετε ο πελάτης  και στην δεύτερη στήλη τα έργα του πελάτη. (τα έργα εισάγονται σε άλλη φόρμα όπως και ο πελάτης)

     

    Στην πρώτη στήλη μετά την επιλογή (ComboBox_DropDownClosed) παίρνω το CustomerID και με αυτό φιλτράρω (Me.ProjectsBindingSource.Filter = ("CustomerID=" & CustID)) το άλλο DS όπου έχει τα έργα του πελάτη με αποτέλεσμα στην δεύτερη στήλη να εμφανίζονται επιτυχώς μόνο τα έργα του πελάτη που επιλέχθηκε στην πρώτη στήλη…..όλα καλά μέχρι εδώ

     

    Τα προβλήματα που παρουσιάζονται είναι τα εξής

     

    Εάν ο δεύτερος πελάτης που καταχωρήσω είναι διαφορετικός από τον πρώτο τότε η τιμή τις δεύτερης στήλης εξαφανίζεται  ( και καλά κάνει αφού το φίλτρο εφαρμόζετε σε όλο το dgv) η τιμή  στον πίνακα τις SQL όμως δεν αλλάζει (αποθηκεύω το ProjectID) εάν κλείσω την φόρμα και την ξανά ανοίξω τότε οι τιμές (όνομα έργου) εμφανίζονται κανονικά

     

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

     

    Έχω δοκιμάσει κάθε πιθανό refresh, σε κατάσταση απελπισίας αντέγραψα όλα τα TA.fill που κάνει η φόρμα στο mybase.load και τα έβαλα σε btn για να το πατήσω μετά την εξαφάνιση τις τιμής αλλά τίποτα..

     

     

     

    Καμία ιδέα???

     

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
     Private Sub StaffExtraPaymentsDataGridView_EditingControlShowing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles StaffExtraPaymentsDataGridView.EditingControlShowing
    
            Try
    
                combo = CType(e.Control, ComboBox)
    
    
                If (combo IsNot Nothing) Then
    
    
                    RemoveHandler combo.DropDownClosed, New EventHandler(AddressOf ComboBox_DropDownClosed)
                    AddHandler combo.DropDownClosed, New EventHandler(AddressOf ComboBox_DropDownClosed)
    
    
                    RemoveHandler combo.DropDown, New EventHandler(AddressOf ComboBox_DropDown)
                    AddHandler combo.DropDown, New EventHandler(AddressOf ComboBox_DropDown)
    
                End If
    
    
            Catch ex As InvalidCastException
    
            Catch ex As Exception
    
                MsgBox(ex.ToString)
    
            End Try
    
        End Sub
    
    
    
     Private Sub ComboBox_DropDownClosed(ByVal sender As Object, ByVal e As EventArgs)
    
            Try
              
    
                If Me.StaffExtraPaymentsDataGridView.CurrentRow.Cells(1).IsInEditMode Then
    
                    Dim CustID As Integer = combo.SelectedValue
    
                    Me.ProjectsBindingSource.Filter = ("CustomerID=" & CustID)
    
    
                End If
    
    
            Catch ex As ArgumentException
    
            Catch ex As Exception
    
                MsgBox(ex.ToString)
    
            End Try
    
        End Sub

     

     


    I hear and I forget. I see and I remember. I do and I understand
  •  24-08-2009, 03:30 53246 σε απάντηση της 53245

    Απ: Πρόβλημα με Datagridview Combobox column

    Αν έχω καταλάβει καλά, μιας και η ώρα είναι περασμένη και θέλω να πάω για ύπνο, θέλεις να κάνεις cascade comboboxes σε datagridview. Ρίξε μια ματιά εδώ κι αύριο τα ξαναλέμε...Sleep


    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  24-08-2009, 16:27 53254 σε απάντηση της 53245

    Απ: Πρόβλημα με Datagridview Combobox column

    Ναι Cascade θέλω να κάνω, (έμαθα και πώς λέγετε) ωραίο το link που έδωσες.

     

    Είμαι στα αρχικά στάδια προγραμματισμού και θα με δυσκολέψει λίγο μέχρι να το καταφέρω, όταν το κάνω σε VB.NET θα ποστάρω τον κώδικα

     

     

    Σε ευχαριστώ για την γρήγορη απάντηση σου


    I hear and I forget. I see and I remember. I do and I understand
  •  26-08-2009, 01:15 53278 σε απάντηση της 53254

    Απ: Πρόβλημα με Datagridview Combobox column

    Μήπως το έχει υλοποιήσει κάποιος σε VB.NET?


    I hear and I forget. I see and I remember. I do and I understand
  •  26-08-2009, 13:02 53279 σε απάντηση της 53278

    Απ: Πρόβλημα με Datagridview Combobox column

    Συνημμένα: CascadeComboExample.7z.zip

    Πω, πω... τι με έβαλες να κάνω νυχτιάτικα και πρωινιάτικα!! Ρϊξε μια ματιά στο συνημμένο. Προσπάθησα να μείνω όσο πιο κοντά γίνεται στο link που σου έδωσα. Στο παράδειγμα εκείνο, η developer (νομίζω είναι γυναίκα) κάνει αλλαγές στο και διαβάζει από το datagridview. Πιο σωστό είναι όπου μπορείς να δουλεύεις με το αντίστοιχο bindingsource. Σου έχω κάποια σχόλια και τροποποίησα σε ορισμένα σημεία τον κώδικα για να σου δείξω πως γίνεται αυτό. Δεν το έκανα παντού, για να υπάρχει μια αντιστοιχία με το Link ώστε να μην μπερδευτείς.

    Χρησιμοποίησα δικιά μου βάση και όχι objects όπως στο παράδειγμα του link. Στο δικό μου παράδειγμα υπάρχουν δύο cascading comboboxes. Όταν χρησιμοποιείς tables από βάση υπάρχει ένα μικρό πρόβλημα που πιθανόν να αντιμετωπίσεις. Αν τα πεδία σου ΔΕΝ είναι nullable, θα πρέπει κατά την αλλαγή της τιμής του ενός combo τα child columns να πάρουν κάποια τιμή και ΟΧΙ null.

    Επίσης, ένα άλλο πρόβλημα έχει να κάνει με το user experience. Κανονικά, η τιμή των child columns θα πρέπει ν' αλλάζει όταν επιλεγεί μια τιμή από το combo. Δυστυχώς, αυτό συμβαίνει μόνο όταν φύγεις από το κελί. Φαντάζομαι ότι για να ξεπεραστεί αυτό το πρόβλημα θα πρέπει να γίνει custom υλοποίηση του combobox control. Αν κάποιο μέλος έχει γράψει αντίστοιχο κώδικα και θέλει να τον μοιροαστεί, ή γνωρίζει τη λύση χωρίς να καταφύγουμε σε custom υλοποίηση, ας κάνει ένα post.

    Τέλος, ΔΕΝ ΕΧΩ ΠΕΙΡΑ ΣΕ VB.NET. Όποιος διαπιστώσει σφάλματα στον κώδικα ας ενημερώσει...

    Σημ.: Το αρχείο είναι σε format 7-zip (.7z). Το μετονόμασα σε .zip για να το δεχτεί ως συνημμένο το site. Δυστυχώς, δεν το παίρνει σαν zip γιατί το τελικό μέγεθος είναι μεγαλύτερο από το επιτρεπτό...


    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  26-08-2009, 13:04 53280 σε απάντηση της 53278

    Απ: Πρόβλημα με Datagridview Combobox column


    hi

    κανε τον κωδικα μετατρωπη με αυτο το site:

    http://www.developerfusion.com/tools/convert/csharp-to-vb



    This Business Is Binary. You are a 1 or a 0. Alive or Dead.-
  •  26-08-2009, 15:41 53291 σε απάντηση της 53279

    Απ: Πρόβλημα με Datagridview Combobox column

    Σε ευχαριστώ που ασχολήθηκες με το θέμα μου

     

    Κατέβασα το αρχείο σου αλλά μου βγάζει σφάλμα με το mdf

     

     

     για το σφάλμα δές εδώ

     

     

    ο SQL Που έχω είναι 2008 Express edition ..

     

     

    Μπορείς να το ξανά ανεβάσεις?

     

     

     


    I hear and I forget. I see and I remember. I do and I understand
  •  26-08-2009, 18:18 53296 σε απάντηση της 53291

    Απ: Πρόβλημα με Datagridview Combobox column

    Δεν έχω εγκατεστημένο τον SQL Server 2008 Express, αλλά δε νομίζω ότι δε μπορείς να διαβάσεις βάση του του 2005 Express. Μάλλον κάτι συμβαίνει με το connection string. Έχεις κάνει την database attached ή την τρέχεις σε local mode; Είσαι σίγουρος ότι τρέχει το service; Έχεις δώσει το σωστό name για το instance; κ.λπ, κ.λπ...


    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  26-08-2009, 21:49 53297 σε απάντηση της 53296

    Απ: Πρόβλημα με Datagridview Combobox column

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

     

    δές εδώ


    I hear and I forget. I see and I remember. I do and I understand
  •  26-08-2009, 22:11 53298 σε απάντηση της 53297

    Απ: Πρόβλημα με Datagridview Combobox column

    Googlara το πρόβλημα "the header for file is not a valid database file header the file size property is incorrect" και κατέληξε εδώ

    http://social.msdn.microsoft.com/forums/en-US/sqltools/thread/64f13d45-9581-4030-8dfe-c8e6ef0dc391/

     


    I hear and I forget. I see and I remember. I do and I understand
  •  27-08-2009, 13:53 53306 σε απάντηση της 53298

    Απ: Πρόβλημα με Datagridview Combobox column

    Αν για κάποιο λόγο το αρχείο ήταν corrupted, μετά την αποσυμπίεση δε θα έπαιζε και σε μένα. Αλλά τρέχει κανονικά. Μήπως δεν κατάλαβες ότι το αρχείο ΔΕΝ είναι zip; Αναγκάστηκα κι έβαλα την κατάληξη zip γιατί δεν το δεχόταν το DNZ για upload. Η κανονική κατάληξη του αρχείου είναι .7z. Σβήσε την κατάληξη .zip και κράτησε μόνο την άλλη (μετονόμασε το αρχείο δηλαδή). Το 7-Zip θα το βρεις εδώ. Πάντως, μου φαίνεται λίγο απίθανο να μην κάνει ο SQL Server 2008 Express attach βάση δεδομένων που δημιουργήθηκε με τον SQL Server 2005 Express. Δοκίμασε να αποσυμπιέσεις το αρχείο χρησιμοποιώντας το 7-Zip, αφού πρώτα το μετονομάσεις. Διαφορετικά κοίταξε τις ρυθμίσεις και την ονομασία του instance του SQL Server. Εξακολουθώ να πιστεύω ότι φταίει το connection string. Παρακλώ, αν κάποιος άλλος έχει κατεβάσει το συνημμένο και αντιμετωπίζει το ίδιο πρόβλημα με τον constantine-55 ας κάνει ένα post. Έτσι, θα διευκολυνθούμε και οι δύο στο να καταλάβουμε τι ακριβώς συμβαίνει.


    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  27-08-2009, 15:19 53307 σε απάντηση της 53306

    Απ: Πρόβλημα με Datagridview Combobox column

    Το αρχείο το έκανα μετανομασία και μετά το αποσυμπίεσα με 7Ζ  (και εγώ αυτό χρησιμοποιώ).

     

    Εάν μπορείς δοκίμασε να κάνεις detach την βάση από τον SQL management explorer

    Ανοίγεις το Management studio επιλέγεις την βάση, κάνεις δεξί κλικ, επιλέγεις TASKS/DETACH

     

    Μήπως και παίξει με αυτόν τον τρόπο…

     

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

     

    Εάν δεν σου κάνει κόπο κάνε την βάση detach και πόσταρε την με επισύναψη.

     

    αχ αυτό το cmb....!


    I hear and I forget. I see and I remember. I do and I understand
  •  27-08-2009, 19:02 53310 σε απάντηση της 53307

    Απ: Πρόβλημα με Datagridview Combobox column

    Συνημμένα: Taxonomy.zip

    Σου επισυνάπτω το script της βάσης για να τη δημιουργήσεις εσύ όπου θέλεις. Περιλαμβάνει και τα objects και τα data. Έχω ονομάσει τη βάση TAXONOMY. Ποσοχή στο Filename και του αρχείου της βάσης και του log file. Πρόκειται για το path και την ονομασία του αρχείου της βάσης και του log. Άλλαξε την τιμή αυτής της παραμέτρου, ανάλογα με το δικό σου configuration. Ελπίζω να ξέρεις να δουλεύεις με scripts...

    Αφού τη δημιουργήσεις, τροποποίησε το connection string για να συνδεθείς μαζί της είτε στο instance είτε σαν file στο directory της εφαρμογής. Φοβάμαι ότι δε μπορώ να σε βοηθήσω περισσότερο, επειδή δεν ξέρω πως έχεις ρυθμίσει τον SqlServer.


    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  28-08-2009, 14:41 53316 σε απάντηση της 53310

    Απ: Πρόβλημα με Datagridview Combobox column

    Μάρκο σε ευχαριστώ πολύ για την βοήθεια σου.

     

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

    … το δοκίμασα και τελικά πέτυχε..

    δουλεύει άψογα μέχρι στιγμής αλλά θέλω να το δοκιμάσω περαιτέρω πριν δημοσιεύσω τον κώδικα στην κοινότητα.

     

     

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


    I hear and I forget. I see and I remember. I do and I understand
  •  28-08-2009, 18:02 53333 σε απάντηση της 53316

    Απ: Πρόβλημα με Datagridview Combobox column

    Η μεταβλητή combo είναι ορισμένη στην αρχή τις φόρμας (Dim combo As ComboBox)

     

    Τελικά για να πετύχω αυτό που θέλω όρισα ένα καινούριο BindingSource στο ίδιο Dataset δηλαδή τα cmb έχουν κανονικά DataSource ορισμένο μέσα από το DGV

    αλλά στα events το αλλάζω

     

    Παραθέτω τον κώδικα..

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
     
    Private Sub StaffExtraPaymentsDataGridView_EditingControlShowing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles StaffExtraPaymentsDataGridView.EditingControlShowing
    
            Try
    
                combo = CType(e.Control, ComboBox)
    
                If (combo IsNot Nothing) Then
    
    
                    RemoveHandler combo.DropDownClosed, New EventHandler(AddressOf ComboBox_DropDownClosed)
                    AddHandler combo.DropDownClosed, New EventHandler(AddressOf ComboBox_DropDownClosed)
    
    
                    RemoveHandler combo.DropDown, New EventHandler(AddressOf ComboBox_DropDown)
                    AddHandler combo.DropDown, New EventHandler(AddressOf ComboBox_DropDown)
    
    
                End If
    
    
            Catch ex As InvalidCastException
    
            Catch ex As Exception
    
                MsgBox(ex.ToString)
    
            End Try
    
        End Sub
    
    
    Private Sub ComboBox_DropDownClosed(ByVal sender As Object, ByVal e As EventArgs)
    
            'Όταν επιλεχθεί ο πελάτης να γίνει φιλτράρισμα του cmb ProjectID με βάση τον επιλεγμένο πελάτη
            Try
    
                If Me.StaffExtraPaymentsDataGridView.CurrentRow.Cells(1).IsInEditMode Then
    
    
                    Dim CustID As Integer = combo.SelectedValue
                    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
                    Dim bs As New BindingSource
                    bs.DataSource = Me.ProjectForStaffextraPayDS
                    bs.DataMember = "Projects"
                    bs.Filter = ("CustomerID=" & CustID)
    
                    Dim col As New DataGridViewComboBoxCell
                    col = Me.StaffExtraPaymentsDataGridView.CurrentRow.Cells(2)
    
                    col.DataSource = bs
                    col.DisplayMember = "ProjectName"
                    col.ValueMember = "ProjectID"
                    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    
                End If
    
            Catch ex As ArgumentException
    
            Catch ex As Exception
    
                MsgBox(ex.ToString)
    
            End Try
    
        End Sub
    
    
    Private Sub ComboBox_DropDown(ByVal sender As Object, ByVal e As EventArgs)
    
            'Εάν πατηθεί το cmb ProjectID που έχει ήδη αποθηκευμένο πελάτη & έργο να γίνει φιλτράρισμα με βάση τον επιλεγμένο πελάτη που υπάρχει
    
            Try
    
                Dim CustID As Integer = Me.StaffExtraPaymentsDataGridView.CurrentRow.Cells(1).Value
    
                If Me.StaffExtraPaymentsDataGridView.CurrentRow.Cells(2).Value IsNot DBNull.Value Then
    
    
                    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
                    Dim bs As New BindingSource
                    bs.DataSource = Me.ProjectForStaffextraPayDS
                    bs.DataMember = "Projects"
                    bs.Filter = ("CustomerID=" & CustID)
    
                    Dim col As New DataGridViewComboBoxCell
                    col = Me.StaffExtraPaymentsDataGridView.CurrentRow.Cells(2)
    
                    col.DataSource = bs
                    col.DisplayMember = "ProjectName"
                    col.ValueMember = "ProjectID"
                    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    
                End If
    
            Catch ex As InvalidCastException
    
            Catch ex As Exception
    
                MsgBox(ex.ToString)
    
            End Try
    
        End Sub
    
    
    
    Public Function ExtraPayBlankCell() As Boolean
    
            'Ελέγχει εάν το πεδίο ProjectID δεν έχει έργο σε περίπτωση που έχει αλλάξει το όνομα σε υπάρχουσα εγγραφή
            'χωρίς να επιλεγεί καινούριο έργο (στην βάση υπάρχει το παλιό έργο εάν δεν επιλεχθεί καινούριο έργο
    
            Try
    
                Dim first As Integer = Me.StaffExtraPaymentsDataGridView.Rows.GetFirstRow(DataGridViewElementStates.Displayed)
                Dim last As Integer = Me.StaffExtraPaymentsDataGridView.Rows.GetLastRow(DataGridViewElementStates.Displayed)
                Dim CellBlankFlag As Boolean = False
    
                For i As Integer = first To last
    
                    Dim Cval As String = Me.StaffExtraPaymentsDataGridView.Item(2, i).FormattedValue.ToString
    
                    If Cval = Nothing Then
                        CellBlankFlag = True
                        MsgBox("Παρακαλώ επιλέξτε έργο για τον πελάτη και εισάγετε το ποσό αμοιβής στον πίνακα έξτρα αμοιβές", MsgBoxStyle.Critical)
    
                    End If
                Next
    
    
                Return CellBlankFlag
    
    
            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try
    
    
        End Function

     

     

     

     

    Για παραπάνω cascade cmb δεν ξέρω εάν θα δουλέψει γιατί δεν το έχω δοκιμάσει

    Την Function ExtraPayBlankCell  την χρησιμοποιώ όταν ο χρήστης αποθηκεύει τα δεδομένα εάν υπάρχει true βγάζει μήνυμα για να επιλέξει έργο όπως φαίνεται και στην function..

     

    Ένα κολιματάκι που έχει είναι ότι θα πρέπει να φύγεις από το cmb ProjectID και να πάς στο διπλανό κελί (Αμοιβή) για να ξεκολλήσει η function..

     


    I hear and I forget. I see and I remember. I do and I understand
Σελίδα 1 από 2 (19 εγγραφές)   1 2 >
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems