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

 

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

Persist περιεχομένων ReorderList με LINQ to SQL DataSource

Îåêßíçóå áðü ôï ìÝëïò cap. Τελευταία δημοσίευση από το μέλος George J. Capnias στις 02-02-2009, 17:50. Υπάρχουν 4 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  01-02-2009, 12:17 48064

    Persist περιεχομένων ReorderList με LINQ to SQL DataSource

    Επειδή ίσως κάποιος συνάδελφος να το έχει ήδη κάνει, αναζητώ τον καλύτερο δυνατό τρόπο να κάνω persist σε ΜΙΑ κίνηση τα δεδομένα ενός ReorderList στα οποία έχω κάνει bind τα αποτελέσματα ενός linq to sql query. Το persist δεν θέλω να γίνεται ανά reorder action, αλλά μια και καλή με το κλικ ενός hyperlink. Δεν με ενδιαφέρουν θέματα concurrency σε αυτό το context που δουλεύω, οπότε θέλω να αφήσω το χρήστη να αλλάξει τη σειρά όπως θέλει και να τη "γράψει" στο τέλος στη βάση (as opposed to να κάνω εγγραφή κάθε φορά που γίνεται ένα reorder).

    Εξηγώ με μεγαλύτερη λεπτομέρεια: Εδώ φορτώνω τα περιεχόμενα του ReorderList. Μην δίνετε σημασία στο πως καλώ το datacontext, έχω φτιαξει ένα singleton wrapper για να μην το κάνω initialize συνέχεια.

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Not Page.IsPostBack Then
    Dim db As TestContextDataContext = SingletonDataContextWrapper.GetInstance.DataContext
    Dim itemcol = (From rec In db.SampleCategories Select name = rec.description, id = rec.id, sort = rec.ord)
    Me.ReorderList1.DataSource = itemcol.ToList()
    Me.ReorderList1.DataBind()
    End If

    End Sub

    Εξυπακούεται φυσικά οτι το πεδιό sort είναι το πεδίο με το οποίο ορίζεται η σειρά εμφάνισης. Δεν έχω orderby στο συγκεκριμένο κώδικα κακώς, απλά επειδή είναι test table τα έχω ούτως η άλλως καταχωρήσει με τη σειρά (για να μην με βρίσετε το αναφέρω) :)

    Τώρα, αφού ο χρήστης κάνει ο,τι κάνει με το ReorderList, έχω ένα LinkButton που θα πρέπει με το που κάνουμε κλικ να κάνει persist στη database τη νέα σειρά πραγμάτων. Και εδώ αρχίζουν οι ερωτήσεις:

    - Δεν μπορώ να πάρω το datasource πίσω από το reorderlist. (Φυσικό, αφού γίνεται postback με το κλικ στο LinkButton). Αρα, δεν έχω πρόσβαση στο list που του έδωσα.

    - Εχω πρόσβαση στο reorderListItemCollection, αλλά δεν βλέπω να περιέχει ΚΑΜΙΑ πληροφορία για τα underlying objects. Αρα τι να το κάνω;

    - Ο μόνος τρόπος να κάνω batch update τελικά είναι να χρησιμοποιήσω το ReorderItem event οπου το μόνο που γνωρίζω είναι το old/new index και να αλλάζω manually τη σειρά των underlying αντικειμένων, εφαρμόζοντας μόνο ένα db.SubmitChanges στο LinkButton1_Click μου;

    Βασικά έχω μπερδευτεί λίγο. Οποιαδήποτε βοήθεια είναι ευπρόσδεκτη.

    EDIT: Δεν υλοποιώ add/delete functionality, το μόνο που θέλω να αλλάζω είναι το ordering υπαρχόντων records, το οποίο εκφράζεται από ένα int πεδίο στη βάση.

     

     


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

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  01-02-2009, 13:32 48067 σε απάντηση της 48064

    Απ: Persist περιεχομένων ReorderList με LINQ to SQL DataSource

    Γιατί δεν βάζεις το itemcol κάπου: Session, ViewState, ApplicationCache, όπου; ΑΦΟΥ το κάνεις ReadOnly.

    Μετά μπορείς να συγκρίνεις το πριν (itemcol) και το μετά (reorderListCollection) και να φτιάξεις τα αντίστοιχα Updates προς την βάση;

     

    George J.


    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
  •  01-02-2009, 13:43 48068 σε απάντηση της 48067

    Απ: Persist περιεχομένων ReorderList με LINQ to SQL DataSource

    Η αλήθεια είναι οτι το σκέφτηκα αυτό. Ψάχνοντας σε διάφορα forums είδα οτι και άλλοι πηγαίνουν με το ίδιο approach. Απλά αναρωτιόμουν αν υπάρχει πιό αποτελεσματικός τρόπος να το κάνω.

    Επιπρόσθετα, δεν ξέρω ΤΙ να συγκρίνω μεταξύ του itemcol και του reorderListCollection μια και δεν φαίνεται το δεύτερο να έχει καμία σύνδεση με το actual datasource. Ουτε καν ids. Αυτό που βλέπω να κάνουν άλλοι είναι να τα "δένουν" πάντα πάνω στο event ReorderItem και όχι να τα συγκρίνουν στο τέλος. Κάτι πρέπει να παραλείπω, αλλά δεν ξέρω τι.

     

     

     


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

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  02-02-2009, 13:32 48078 σε απάντηση της 48068

    Απ: Persist περιεχομένων ReorderList με LINQ to SQL DataSource

    Και μια άλλη απορία: Αντε και έσωσα το list (of anonymous type) στο session, πώς το παίρνω πάλι πίσω; Ως object! Αρα, λοιπον, μάλλον χρειάζομαι και ενδιάμεσο class (ένα data carrier) για να κρατάω τα στοιχεία, ε;


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

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  02-02-2009, 17:50 48084 σε απάντηση της 48078

    Απ: Persist περιεχομένων ReorderList με LINQ to SQL DataSource

    Άλλαξε το

    Dim itemcol = (From rec In db.SampleCategories Select name = rec.description, id = rec.id, sort = rec.ord)
    Me.ReorderList1.DataSource = itemcol.ToList()

    σε

    Dim itemcol = (From rec In db.SampleCategories).ToList()
    Me.ReorderList1.DataSource = itemcol

    και τώρα είναι typed...

     

    George J.


    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems