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

 

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

Simple Databinding property ενός object (inherits List(of T)) σε Textbox - NET 2.0

Îåêßíçóå áðü ôï ìÝëïò cap. Τελευταία δημοσίευση από το μέλος γιωργος μπακογιαννης στις 24-06-2006, 14:17. Υπάρχουν 7 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  16-06-2006, 11:43 14065

    Simple Databinding property ενός object (inherits List(of T)) σε Textbox - NET 2.0

    Εχω ψιλουποψιαστεί γιατί συμβαίνει, αλλά θα ήθελα να ακούσω και καμμια άλλη γνώμη.
    Το σενάριο είναι οτι δεν μπορώ να κάνω bind (απλό) ενός property ενός δικού μου object που κληρονομεί από List (of T) σε ένα Textbox. Το αναλύω παρακάτω:

    Εχω ένα απλό textbox σε μια φόρμα, ας πούμε το TextBox1.
    Εχω επίσης ένα δικό μου object, ας πούμε το myThing. Στην πιό απλουστευμένη του μορφή ορίζεται κάπως έτσι:

    Public Class ΜyThing
        Inherits List(Of Something)

        Private _myProperty As String

        Public Property MyProperty() As String
            Get
                Return _myProperty
            End Get
            Set(ByVal value As String)
                _myProperty = value
            End Set
        End Property

    End Class

    Θέλω μετά να κάνω bind το MyProperty στο Textbox1. (Ας υποθέσουμε οτι το MyProperty υπολογίζει σύνολα από κάποια αριθμητικά properties των αντικειμένων of type Something που βρίσκονται αποθηκευμένα στο myThing - κάτι τέτοιο κάνει και στην πραγματική υλοποίηση). Κάνω λοιπόν:

     Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

            'Ετσι απλά φτιάχνω κάτι για να ειναι πιό ολοκληρωμένο
            Dim thingy As New MyThing
            Dim o1 As New Something
            Dim o2 As New Something
            thingy.Add(o1)
            thingy.Add(o2)

            'Προσπαθώ να κάνω το databinding
            Me.TextBox1.DataBindings.Add("Text", thingy, "MyProperty")

        End Sub

     Και τρώω το εξής:

    System.ArgumentException
    {"Cannot bind to the property or column MyProperty on the DataSource.
    Parameter name: dataMember"}

    Φυσικά, κοιτώντας το StackTrace αποκτώ την υποψία οτι περιμένει να κάνει bind σε λίστα και δεν μπορεί μια και το control δεν υποστηρίζει λίστες:

       at System.Windows.Forms.BindToObject.CheckBinding()
       at System.Windows.Forms.BindToObject.SetBindingManagerBase(BindingManagerBase lManager)
       at System.Windows.Forms.Binding.SetListManager(BindingManagerBase bindingManagerBase)
       at System.Windows.Forms.ListManagerBindingsCollection.AddCore(Binding dataBinding)
       at System.Windows.Forms.BindingsCollection.Add(Binding binding)
       at System.Windows.Forms.BindingContext.UpdateBinding(BindingContext newBindingContext, Binding binding)
       at System.Windows.Forms.Binding.SetBindableComponent(IBindableComponent value)
       at System.Windows.Forms.ControlBindingsCollection.AddCore(Binding dataBinding)
       at System.Windows.Forms.ControlBindingsCollection.Add(String propertyName, Object dataSource, String dataMember, Boolean formattingEnabled, DataSourceUpdateMode updateMode, Object nullValue, String formatString, IFormatProvider formatInfo)
       at System.Windows.Forms.ControlBindingsCollection.Add(String propertyName, Object dataSource, String dataMember)

    (τα παρακάτω διαγράφονται για να μην γεμιζουμε με άχρηστη πληροφορία)

    Τόσο πολύ τον μπερδεύει το γεγονός οτι πρόκειται για List (of T), ακόμα και αν εγώ θέλω να κάνω bind σε ένα απλό property;
    Το έχει διαπιστώσει κάποιος άλλος; Υπάρχει κάποιο workaround;

     

       


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  17-06-2006, 16:54 14097 σε απάντηση της 14065

    Απ: Simple Databinding property ενός object (inherits List(of T)) σε Textbox - NET 2.0

    Χμμμ..να υποθέσω οτι είτε δεν έχει συμβεί σε κανέναν, είτε η ερώτηση ήταν πολύ κουτή; :)


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  19-06-2006, 23:14 14132 σε απάντηση της 14097

    Απ: Simple Databinding property ενός object (inherits List(of T)) σε Textbox - NET 2.0

    Δήλωσε το property "MyProperty" στην class Something που έχεις. Και όλα θα παίξουν. Συγνώμη αλλά λόγω χρόνου δεν μπορώ να σου εξηγήσω για πιο λόγο αλλά τουλάχιστον θα ξεκολλήσεις.
  •  23-06-2006, 17:40 14207 σε απάντηση της 14097

    Απ: Simple Databinding property ενός object (inherits List(of T)) σε Textbox - NET 2.0

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

    Είναι όπως μας τα λέει ο φίλος μας από τη Κω.

     

    Σου στέλνω ένα παράδειγμα

     


    while (!dead) learn();
  •  24-06-2006, 04:18 14215 σε απάντηση της 14207

    Απ: Simple Databinding property ενός object (inherits List(of T)) σε Textbox - NET 2.0

    Πω...είχα γράψει ένα κατεβατό και έφαγα δικτυακή φρίκη όταν είδα το καταραμένο "page cannot be displayed". Οπότε συνοψίζω (συγνώμη που δεν θα είμαι τόοοσο αναλυτικός αλλα δεν αντέχω να τα ξαναγράψω)

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

     



    Public Class Something
        Private _myProperty As Int32
        Public Property MyProperty() As Int32
            Get
                Return _myProperty
            End Get
            Set(ByVal value As Int32)
                _myProperty = value
            End Set
        End Property
    End Class
    '
    Public Class ΜyThing
        Inherits List(Of Something)
        Public ReadOnly Property GetMySum() As Int32
            Get
                Dim retval As Int32 = 0
                For Each s As Something In Me
                    retval += s.MyProperty
                Next
                Return retval
            End Get
        End Property
    End Class

    Και το binding να γίνεται πάνω στο GetMySum. Αυτό που μου έγραψες εσύ, Γιώργο, κάνει bind επάνω σε property των items της λίστας και μάλιστα στο 1ο item. (και τα δυο textboxes οταν το έτρεξα μου έδιναν την τιμή Test1). Εγώ όμως θέλω το property που έχω στη λίστα, οχι στα items της. (Εξάλλου γιατί να έκανα τον κόπο να φτιάξω object που να κληρονομεί από list αφού αν ήθελα τη βασική λειτουργικότητα θα μπορούσα απλά να ορίσω μια μεταβλητή και να χώσω μέσα τα Something μου; )

    Οπως βλέπεις, το binding μπορεί να γίνει και πάνω σε readonly property, δηλ. one-way. Το θέμα είναι οτι ο κύριος compilerας θεωρεί οτι κάνω bind σε λίστα και δεν του αρέσει....


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  24-06-2006, 08:35 14218 σε απάντηση της 14215

    Απ: Simple Databinding property ενός object (inherits List(of T)) σε Textbox - NET 2.0

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

    Φίλε Σωτήρη,

     

    έλεγξε το solution MyBooks

     

    και πες μου εάν είναι αυτό που ήθελες να κάνεις.


    while (!dead) learn();
  •  24-06-2006, 12:18 14222 σε απάντηση της 14218

    Απ: Simple Databinding property ενός object (inherits List(of T)) σε Textbox - NET 2.0

    Ναι, Γιώργο. Αυτό ήθελα.

    Παρατηρώ οτι έχεις φτιάξει ένα wrapper για το object που κάνει inherit list (of T) και κάνεις bind το property του Wrapper αντί να κάνεις bind το ίδιο το object. Προφανώς αυτή ειναι και η λύση, έτσι; Για να μην μπερδευτεί ο compiler κάνουμε bind κάτι το οποίο το ίδιο ΔΕΝ είναι list αλλά κάνει wrap το list.

    Σωστή σκέψη. Αλλα δεν είναι λίγο...εχμ, ugly από πλευράς vs.net αυτό; Θελω να πω οτι η λογική των databindings μας αναγκάζει να έχουμε wrappers σε αυτές τις περιπτώσεις και όχι να κάνουμε extend το list (of T) σύμφωνα με τις δικές μας ανάγκες.

    Παντως παρ'όλα αυτά οντως αυτή είναι η λύση και σε ευχαριστώ πολύ για τον κόπο σου! Θα ήθελα αν έχεις κάποιο χρονο να ακούσω και τη δική σου (και όχι μόνο) άποψη περί αυτού. Εγώ το θεωρώ ελάττωμα. Μήπως όμως δεν είναι έτσι;


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  24-06-2006, 14:17 14223 σε απάντηση της 14222

    Απ: Simple Databinding property ενός object (inherits List(of T)) σε Textbox - NET 2.0

    Το List(Of T) το βλέπει σαν rows (πληθυντικός~πολλά) και «καταλαβαίνει» να κάνει bind τη λίστα.

    Άρα είναι έτσι όπως τα λες.

    Αλλά: God works in mysterious ways


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