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

 

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

Listbox.SelectedItems to List

Îåêßíçóå áðü ôï ìÝëïò dimos.homatas. Τελευταία δημοσίευση από το μέλος dimos.homatas στις 24-02-2011, 19:21. Υπάρχουν 10 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  24-02-2011, 13:58 63665

    Listbox.SelectedItems to List

    Καλησπέρα,

    ένα θέμα που αντιμετωπίζω κατά καιρούς είναι το πως παίρνω το SelectedItems collection ενός listbox (ή και από άλλα controls) σε μία List.

    Μιλάμε για custom αντικείμενα και όχι strings. Πληροφοριακά, όταν κάνουμε προσθήκη ενός αντικειμένου σε ένα listbox, το οπτικό αποτέλεσμα είναι η ToString(), οπότε με ένα override έχουμε μία χρήσιμη λειτουργικότητα.

    Αποφάσισα να το ψάξω χωρίς να έχω for each -> list.add(selecteditem)

    Μετά από ημίωρο ψάξιμο κατέληξα σε αυτό:
    myObectList = ((myObjectType[])(new ArrayList(myListBox.SelectedItems).ToArray())).ToList();
    Για να πω την αλήθεια μου φαίνεται πιο μπελαλίδικο, και ίσως πιο αργό από ένα for each...

    Τι λέτε; Τι προτείνετε;








    "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
  •  24-02-2011, 14:04 63666 σε απάντηση της 63665

    Απ: Listbox.SelectedItems to List

    Εεε, αν και πιθανότατα να δηλώσω άσχετος ΚΑΙ να μην απαντάω στο ερώτημα ΚΑΙ να είμαι offtopic, γιατί δεν θέλεις τη for each; 


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

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  24-02-2011, 14:15 63667 σε απάντηση της 63666

    Απ: Listbox.SelectedItems to List

    Δεν είσαι καθόλου offtopic! Μη σου πω ότι είσαι και ακριβώς μέσα...

    Και εξηγώ:

    Λαμβάνοντας υπ'όψιν τη ευρύτερη νοοτροπία του frameword (όσο την έχω καταλάβει δηλαδή...)

    και βλέποντας ότι μιλάμε απλά για δύο collections

    και βλέποντας ότι το framework είναι γεμάτο από ToList, ToArray και συναφείς λειτουργικότητες

    και λαμβάνοντας επίσης υπ'όψιν το θέμα της εμφάνισης του κώδικα δεν μου κάθεται καλά το θέμα του iteration σε κάτι τέτοιο (καλόμαθα με το ToList()!!!!)

    για αυτό κάνω και την ερώτηση.

    Αν και σκέφτομαι ότι από πλευράς ταχύτητας η for each μάλλον είναι η πιο γρήγορη από όλες αυτές τις καταστάσεις. Στο κάτω κάτω, όλες οι προαναφερθείσες μέθοδοι, μαζί και με την LINQ, μάλλον iteration κάνουν. Αλλά δεν έχω και επίγνωση του τι γίνεται μέσα στα σώψυχα του framework!

    Να σημειώσω ότι χρησιμοποιώ .ΝΕΤ 3.5. Δεν ξέρω αν έχουν τροποποιηθεί κάποια πράγματα στο 4.

    "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
  •  24-02-2011, 14:55 63671 σε απάντηση της 63667

    Απ: Listbox.SelectedItems to List

    Ίσως πρέπει να δεις τί κάνει η ToList για να πάψεις να ψάχνεις τρόπους χωρίς iteration. Όσο για το ToList, εκτός και αν θέλεις να έχεις μία λίστα με Objects, θα πρέπει να ορίσεις εσύ ο ίδιος τί τύπου περιμένεις να είναι.

    Μπορείς μέσω LINQ να πάρεις τα αντικείμενα στην SelectedItems και να μετατρέψεις όσα γίνεται στον τύπο που θέλεις με κάτι σαν myListBox.SelectedItems.AsEnumerable().OfType<MyType>().ToList(); Το αποτέλεσμα θα περιέχει μόνο όσα items είναι του τύπου MyType. Από πίσω φυσικά παίζουν For Each, και type checks.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  24-02-2011, 15:04 63672 σε απάντηση της 63665

    Απ: Listbox.SelectedItems to List

    Πιθανόν να μην έχω καταλάβει κάτι στην ερώτηση, αλλά το ListBox έχει SelectedItems property, η οποία επιστρέφει ένα collection, το SelectedObjectCollection.

    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  24-02-2011, 15:05 63673 σε απάντηση της 63671

    Απ: Listbox.SelectedItems to List

    Θα το έκανες με for each Παναγιώτη αν κατάλαβα καλά;
    "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
  •  24-02-2011, 15:19 63674 σε απάντηση της 63672

    Απ: Listbox.SelectedItems to List

    Μάρκο το ερώτημα είναι πως μπορώ να πάρω χωρίς επανάληψη τα επιλεγμένα αντικείμενα από ένα listbox. Πχ τα αντικείμενα είναι πελάτες, και θέλω πίσω μία λίστα με τους επιλεγμένους πελάτες.
    "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
  •  24-02-2011, 16:29 63678 σε απάντηση της 63674

    Απ: Listbox.SelectedItems to List

    Από το SelectedObjectCollection με χρήση της Cast extension method.

    [ΠΡΟΣΘΗΚΗ] Σου έχει απαντήσει και ο Παναγιώτης. Εγώ αρχικά νόμιζα ότι έκανες loop σε όλα τα objects της λίστας για να δεις ποια είναι επιλεγμένα.

    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  24-02-2011, 16:58 63680 σε απάντηση της 63678

    Απ: Listbox.SelectedItems to List

    Βρήκα χρόνο να γράψω και τον κώδικα, και είδα ότι δεν χρειάζεται κανένα AsXXX

     private void button1_Click(object sender, EventArgs e)
            {
                var customers=listBox1.SelectedItems.OfType<Customer>().ToList();
                var persons= listBox1.SelectedItems.OfType<Person>().ToList();
                Debug.Assert(customers.Count == 5);
                Debug.Assert(persons.Count == 10);
    
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {            
                for(int i=0;i<5;i++)
                    persons.Add(new Person{Name=i.ToString()});
                for(int j=0;j<5;j++)
                    persons.Add(new Customer{Name=j.ToString(),VAT=j.ToString()});
    
                listBox1.DataSource=persons;
                
            }

    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  24-02-2011, 17:15 63682 σε απάντηση της 63674

    Απ: Listbox.SelectedItems to List

    Έπρεπε να κάνει κι άλλο post ο Παναγιώτης για να μπω στο νόημα!! Έχεις listbox με items που ανήκουν σε διαφορετικό type!! Οπότε πρέπει να χρησιμοποιήσεις την άλλη μέθοδο (OfType) που κάνει filtering.

    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  24-02-2011, 19:21 63687 σε απάντηση της 63682

    Απ: Listbox.SelectedItems to List

    Μάρκο είναι του ίδιου τύπου (στην δική μου περίπτωση), απλά το παράδειγμα του Παναγιώτη καλύπτει και την περίπτωση των διαφορετικών αντικειμένων.

    Το παράδειγμα ήταν σαφέστατο. Και το έχω κάνει και παλιότερα σε Controls collection (φέρε τα controls τύπου τάδε από το δείνα container) , τελικά είναι το ίδιο πράγμα! Δεν πήγε καν το μυαλό μου...

    Ευχαριστώ για τον χρόνο

    "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
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems