Επειδή ίσως κάποιος συνάδελφος να το έχει ήδη κάνει, αναζητώ τον καλύτερο δυνατό τρόπο να κάνω 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