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

 

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

Βοήθεια για την δημιουργεία ενός ComboBox με δυνατότητα editing

Îåêßíçóå áðü ôï ìÝëïò kAnan. Τελευταία δημοσίευση από το μέλος kAnan στις 01-02-2011, 12:30. Υπάρχουν 8 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  26-01-2011, 16:17 62702

    Βοήθεια για την δημιουργεία ενός ComboBox με δυνατότητα editing

    Γεια και χαρά σας φιλαράκια της κοινώτητας dotnetzone.

    Οι απορίες μου πολλές και ξεκινώ αμέσως τις ερωτήσεις που με καίνε.

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

    Σκέφτηκα να την γράψω σε Visual Basic 2010. Διαπίστωσα πως στο εμπόρειο υπάρχουν ένα κάρο controls και χάθηκα με τις ορολογίες που χρησιμοποιούνται απο τους διάφορους κατασκευαστές.

    H VB περιέχει ένα κάρο από δαύτα και θα αναρωτηθεί κανείς γιατί να ψάχνω για επιπλέον;

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

    Αν κάποιος γνωρίζει κανένα καλό κατασκευαστή που να διαθέτει και video training για τα προιντά του θα παρακαλούσα να με ενημερώσει.

    Τώρα θα ήθελα την βοήθεια σας στο εξής (εκτός και αν υπάρχει έτοιμο control προς αγορά!!)

    Σε αρκετά μέρη της εφαρμογής μου θα βάλω ένα ComboΒοχ που ας πούμε θα συνοδεύεται και από ένα EditButton.

    Με το EditButton θα δίνεται η δυνατότητα στον χρήστη να προσθέσει εγγραφές στο combobox να καθορίσει ποια θα είναι η default εγγραφή καθώς και να κάνει μια εγραφή (hidden/unhidden). Δεν σκέφτομαι την διαγραφή των εγραφών προς το παρόν διότι δεν ξέρω και πως να χειριστώ το θέμα database integrity σχετικά με ορφανά records.

    To comboBox θα συνδέεται με διαφορετικό dataset κάθε φορά.

    Σκέφτομαι να δημιουργήσω ένα δικό μου control με τα παραπάνω χαρακτηριστικά.

    Θα εκτιμούσα λοιπόν αν μου δίνατε τις συμβουλές/κατευθύνσεις σας.

    Σας ευχαριστώ πολύ

    Κώστας  

  •  28-01-2011, 09:35 62747 σε απάντηση της 62702

    Απ: Βοήθεια για την δημιουργεία ενός ComboBox με δυνατότητα editing

    Παίδες λίγο σουντο κοουντ!!! 
  •  28-01-2011, 10:11 62749 σε απάντηση της 62747

    Απ: Βοήθεια για την δημιουργεία ενός ComboBox με δυνατότητα editing

    Προσωπική μου άποψη είναι ότι πλέον το .NET καλύπτει πολλές ανάγκες. πχ για το Grid, εκτός και αν κατασκευάζεις κάποιο ERP προς μαζική πώληση, δεν βλέπω αρκετά σημαντικό λόγο που να σε εμποδίζει να χρησιμοποιήσεις το DataGrid του .ΝΕΤ.

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

    (καλά, αν είναι οι κατασκευαστές controls να γίνουν κλέφτες, είναι άλλο καπέλο).

    Τώρα, για το custom control που λες: Τα δεδομένα από που θα τα τραβάει; Κατευθείαν από τη βάση; Θα ήταν καλύτερα να έπαιρνε πχ μία λίστα από αντικείμενα την οποία θα στην προμήθευε κάποιο άλλο κομμάτι κώδικα (το DAL)

    Έτσι μπορείς να φτιάξεις ένα control το οποίο θα είναι περισσότερο επαναχρησιμοποιήσιμο, και εάν είναι καλό, ε, το κυκλοφορείς κιόλας!


    "When the darkness rises up from inside - that is normal.
    It's when you reach down to pull it up - that the noxious warnings sound."
    Tuzak, Farscape
  •  29-01-2011, 20:51 62777 σε απάντηση της 62749

    Απ: Βοήθεια για την δημιουργεία ενός ComboBox με δυνατότητα editing

    Δήμο σ' ευχαριστώ πολύ για την απάντησή σου.

    Έχει να κάνει με επίλυση προβλημάτων στην συντήρηση των έργων τέχνης και αν πάει καλά γιατί όχι θα το βγάλω στην αγορά.
    Να εξηγήσω όμως πως δεν είμαι κανένας σουπερ ντουπερ προγραμματιστή και μακάρι να μπορούσα να δημιουργήσω ένα ERP ...
    Οι γνώσεις μου είναι ολιγοστές για την σημερινή τεχνολογία και γι' αυτό αποφάσισα να δουλέψω σε VB.

    Μια εφαρμογή με πολλές φόρμες με πολλά δεδομένα, θα χρησιμοποιήσω πολλά combo boxes.
    Σκέφτηκα να χρησιμοποιήσω μερικά controls για να μην γράψω κώδικα που άλλοι έχουν μελετήσει και παιδεύσει, το ξεχνώ όμως.

    Τώρα θα ήθελα μερικές συμβουλές για το Combo - Edit Box.
    Όλα το compund box θα παίρνει στην ουσία σαν input ένα πινακάκι με 3 columns Default επιλογή, Hidden, Description.
    O χρήστης θα πρέπει να μπορεί να προσθέσει νέες εγγραφές, να καθορίσει ποια θα είναι η εξ' ορισμού εγγραφή ή αν η εγγραφή θα εμφανίζεται στο combo box. Τα δεδομένα αυτά, θα τα τραβάει από μια βάση (θα έλεγα ένα dataset).

    Μου διαφεύγει το κομμάτι υλοποίηση για το input των δεδομένων.

    Παρακαλώ βοηθήστε.

  •  30-01-2011, 11:20 62787 σε απάντηση της 62777

    Απ: Βοήθεια για την δημιουργεία ενός ComboBox με δυνατότητα editing

    Τα combo χρησιμοποιούνται κατά κανόνα σε περιπτώσεις επιλογής 'lookup' τιμών (γίνονται Lookup από κάποιον πίνακα), πχ η πόλη που μένει κάποιος, η αφορία που ανήκει, το επάγγελμα που κάνει κλπ.

    Ο όχι και τόσο όμορφος τρόπος:

    Βάζεις δίπλα από το combo ένα κουμπάκι το οποίο ανοίγει μία φόρμα όπου φορτώνεις και διαχειρίζεσαι απευθείας τα σχετικά δεδομένα του lookup πίνακα (καλό είναι η φόρμα να είναι επίσης πασπαρτού)

    Και φυσικά ξανακάνεις populate το combo

    Ένας λιγότερο intrusive τρόπος είναι απλά να ανιχνεύεις το textchanged και κάθε φορά να ψάχνει για να δει εάν το στοιχείο που φαίνεται τώρα υπάρχει στον πίνακα. Εάν δεν υπάρχει, ας γίνεται visible από κάτω ένα linklabel που να λέει 'προσθήκη εγγραφής'. Μπορείς να επεκτείνεις αυτήν την λειτουργικότητα και αλλού (delete, update)

    Βέβαια τίθεται και ένα θέμα security: για παράδειγμα, σε ένα ERP δεν μπορεί ο κάθε χρήστης να πάει να μεταβάλλει τα περιεχόμενα των lookup πινάκων (ή δεν θα έπρεπε). Το να δώσεις ένα control με τέτοια λειτουργικότητα ίσως είναι υπερβολή.

    Πάντως, εάν πρόκειται για προσωπική χρήση, θεωρώ ότι οι δύο παραπάνω τρόποι είναι αρκετοί.



    "When the darkness rises up from inside - that is normal.
    It's when you reach down to pull it up - that the noxious warnings sound."
    Tuzak, Farscape
  •  30-01-2011, 21:45 62815 σε απάντηση της 62787

    Απ: Βοήθεια για την δημιουργεία ενός ComboBox με δυνατότητα editing

    Δήμο μάλλον δεν παρουσίασα καλά το πρόβλημα μου.

    Στην εφαρμογή μου  θα χρειαστεί σε ένα κάρο φόρμες να χρησιμοποιήσω τον συνδιασμό combo - edit button πολλές φορές.

    Έτσι σκέπτομαι να δημιουργήσω ένα compound control με όλες του τις κλάσεις, properties, methods, events λιγάκι obj για να μαθαίνω κιόλας
    Αυτό που δεν γνωρίζω πως θα υλοποιήσω (σε αυτό το class!!!) είναι το input σε αυτό το compund control, 
    Το κάθε compound control ναι μεν θα τραβάει δεδομένα από διαφορετικούς πίνακες, dataset,
    όμως η δομή αυτών των πινάκων θα είναι ίδια κάθε φορά (ένας πίνακας ή dataset με τρις κολώνες boolean, boolean, string).

    Θα θέλεις και έχεις τον χρόνο σε παρακαλώ προσπάθησε να με βοηθήσεις και στα παρακάτω:
    1) Αναζητώ ένα refernce guide ΒΙΒΛΙΟ για να βρίσκω διάφορες πληροφορίες όπως π.χ είδη Exception ... 
    2) Το statement TRY CATCH πόσο expensive είναι μπορώ να το πολυ-χρησιμοποιώ ?  
    3) Το Field validation το έχω παιδεύσει, το form validation από ποιο event γίνεται?

    Ευχαριστώ πολύ


  •  31-01-2011, 08:35 62829 σε απάντηση της 62815

    Απ: Βοήθεια για την δημιουργεία ενός ComboBox με δυνατότητα editing

    Οκ,

    1) Δεν έχω κάτι υπ'όψιν, έχω διαβάσει διάφορα βιβλία, αλλά τελικά το καλύτερο manual είναι το Internet! Καλά, όχι και το καλύτερο, αλλά το γενικότερο αν θέλεις. Βιβλία παίρνω πλέον για συγκεκριμένα πράγματα
    2) Δεν ξέρω ποιο είναι το best practice για τα try catch. Άλλοι τα βάζουν παντού, άλλοι καθόλου. Δεν ξέρω πόσο βαρύ είναι, αλλά όσο και νά'ναι κοστίζει. Προσωπικά προτιμώ να βάζω try catch μόνο σε μέρη όπου υπάρχει πιθανότητα αποτυχίας, πχ κάποιο timeout σε επικοινωνία με κάποιον server. Γενικότερα, το να βάζεις try catch σε buggy κώδικα... όχι και τόσο καλό! Καλύτερα να διορθώσεις το bug. Αλλά το να μιλάει το πρόγραμμά σου με άλλα πράγματα (servers, OS, whatever), ε, εκεί οπωσδήποτε.
    3) Δεν υπάρχει κάτι τέτοιο! Απλά φτιάξε την ρουτίνα και φώναζέ την στα events που θέλεις. Θα μπορούσες να βάλεις ένα κουμπί save. Ή μπορείς να την βάλεις να εκτελείται στα Enter & Leave events των controls της φόρμας.

    Πρότασή μου πάντως, να κάνεις το control overloaded, να διαβάζει και datarows/datatables αλλά και αντικείμενα (με properties ίδια με το κοινό σχήμα με τους lookup πίνακες

    "When the darkness rises up from inside - that is normal.
    It's when you reach down to pull it up - that the noxious warnings sound."
    Tuzak, Farscape
  •  31-01-2011, 23:01 62872 σε απάντηση της 62702

    Απ: Βοήθεια για την δημιουργεία ενός ComboBox με δυνατότητα editing

    Μπορείς να χρησιμοποιήσεις τον παρακάτω κώδικα που ελπίζω να σε βοηθήσει στις ανάγκες σου. Μπορείς φυσικά να φτιάξεις και δικό σου userControl που θα περιέχει linklabel και combo. Μου είχε ζητηθεί και εμένα παρόμοια υλοποίηση στην οποία θα μπορούσε ο χρήστης να γεμίζει το combo μέσα από χιλιάδες εγγραφές γιά αυτόν τον λόγο και το keypress event.

    Βάζωντας το ControlLink στην φόρμα σου στο Design, μπορείς κάτω από την κατηγορία My properties μπορείς να "συνδέσεις" ένα άλλο control της επιλογής σου στην συγκεκριμένη περίπτωση ένα combobox.

    Καλή επιτυχία

    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
     
    Public Class ControlLink
        Inherits LinkLabel
    
        Private _Link As Control
    
        <System.ComponentModel.Category("My Properties")>
        Public Property LinkedControl As Control ' Μπορείς να το περιορίσεις γία combos μόνο. (as ComboBox)
            Get
                Return Me._Link
            End Get
            Set(ByVal value As Control)
                If TypeOf value Is Form Then
                    If Me.DesignMode Then
                        Throw New Exception("Όχι φόρμα.")
                    Else
                        Throw New Exception("Run time exception. Όχι φόρμα.")
                    End If
                ElseIf Object.ReferenceEquals(Me, value) Then
                    Throw New Exception("Όχι τον εαυτό μου.")
                End If
    
                Me._Link = value
            End Set
        End Property
    
        Protected Overrides Sub OnLinkClicked(ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs)
            If TypeOf Me._Link Is ComboBox Then
                Dim cbo = DirectCast(Me._Link, ComboBox)
    
                If cbo.SelectedIndex = -1 Then
                    ' Δείξε φόρμα Καταχώρησης ή όλες τις τιμές σε Grid
                Else
                    ' Δείξε φόρμα Ενημέρωσης ή όλες τις τιμές σε Grid
                End If
            End If
    
            MyBase.OnLinkClicked(e)
        End Sub
    End Class

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Public Class MyCombo
        Inherits ComboBox
    
        ' ή static με παράμετρο combo
        Public Sub Fill(ByVal Data As DataTable, ByVal IDColumn As String, ByVal DisplayColumn As String)
            Me.DataSource = Nothing
            Me.Items.Clear()
    
            Me.ValueMember = IDColumn
            Me.DisplayMember = DisplayColumn
    
            Me.DataSource = Data
        End Sub
    End Class

     

    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
     
    Public Class Form1
        ' Αυτο το datatable είναι (και καλα) ο πίνακας της βάσης με τα δεδομένα
        Private _Data As DataTable
    
        ' να μπορεί ο χρήστης να κάνει γράφει κάτι και να πατάει enter σε πολλές εγγραφές
        Private Sub MyCombo1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyCombo1.KeyPress
            If e.KeyChar <> ChrW(Keys.Return) Then Return
    
            If Me.MyCombo1.Text <> String.Empty Then
                Dim rows() As DataRow
                Dim mydataset As New DataSet
    
                rows = _Data.Select("Description LIKE '%" & CType(sender, ComboBox).Text & "%'")
    
                If rows.Length > 0 Then
                    mydataset.Merge(rows)
                    MyCombo1.Fill(mydataset.Tables(0), "ID", "Description")
                Else
                    MyCombo1.Fill(Me._Data.Clone, "ID", "Description")
                    MessageBox.Show("Δεν βρήκα εγγραφές")
                End If
            Else
                MyCombo1.Fill(_Data, "ID", "Description")
            End If
        End Sub
    
    
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Dim r As DataRow
            Dim dt As New DataTable
    
            dt.Columns.Add("ID", GetType(Integer))
            dt.Columns(0).AllowDBNull = False
            dt.Columns(0).Unique = True
            dt.Columns(0).AutoIncrement = True
            dt.Columns(0).AutoIncrementSeed = 1
            dt.Columns(0).AutoIncrementStep = 1
    
            dt.Columns.Add("Description")
    
            For i As Integer = 0 To 255
                r = dt.NewRow
    
                r.Item("Description") = Chr(i)
                dt.Rows.Add(r)
            Next
    
            dt.AcceptChanges()
    
            Me._Data = dt
    
            MyCombo1.Fill(dt, "ID", "Description")
        End Sub
    End Class

     

  •  01-02-2011, 12:30 62886 σε απάντηση της 62872

    Απ: Βοήθεια για την δημιουργεία ενός ComboBox με δυνατότητα editing

    Κατ' αρχήν Dimo, Libra σας ευχαριστώ πολύ.

    @Libra, έριξα μια γρήγορη ματιά στον κώδικα που παράθεσες και κατάλαβα αρκετά.

    Δυσκολεύομαι να κατανοήσω το "Class ControlLink" θα το δω το βράδυ με την ησυχία μου και θα επανέλθω.

    Και πάλι ευχαριστώ πολύ.

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