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

 

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

GridView RowDataBound Event - Access more than one row

Îåêßíçóå áðü ôï ìÝëïò gstam78. Τελευταία δημοσίευση από το μέλος George J. Capnias στις 29-05-2014, 09:51. Υπάρχουν 5 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  27-05-2014, 18:05 75425

    GridView RowDataBound Event - Access more than one row

    Καλησπέρα σας,

    Θα ήθελα να ρωτήσω το εξής: Υπάρχει η δυνατότητα μέσα από το RowDataBound event ενός GridView να προσπελαύνω περισσότερα από ένα rows τη φορά; Βασικά όταν πάω να προσπελάσω το δεύτερο row (GridView1.Rows[1]) μου βγάζει το μήνυμα λάθους "index out of range". Για να γίνω πιο σαφής προσπαθώ να κάνω populate ένα dropdownlist control ανά GridViewRow. To populate γίνεται εξετάζοντας τις προηγούμενες τιμές στο dropdownlist ξεκινώντας από την πρώτη γραμμή του GridView. Σκοπός είναι σε κάθε νέο row του GridView το DropDownList να περιλαμβάνει μόνο τις απομένουσες τιμές , αφαιρώντας κάθε φορά αυτές που έχουν γίνει selected σε προηγούμενα row.

     Ενδεικτικός κώδικας, ο οποίος ελέγχει τις τιμές των dropdownlist των προηγούμενων row (όταν το RowIndex παίρνει τιμή μεγαλύτερη του 0 βγαίνει το μήνυμα λάθους "index out of range") 


    private IList <items> CheckPreviousRecordsForAddedItems() { int rowIndex = 0; IList <items> itms = items.GetItems(); IList<items> addtoBasket = new List<items> (); if (Session["CurrentTable"] != null) { DataTable dt = (DataTable)Session["CurrentTable"]; if (dt.Rows.Count > 0) { for (int i = 0; i < dt.Rows.Count-1; i++) { DropDownList ddlItem = (DropDownList)GridView1.Rows[rowIndex].Cells[2].FindControl("ddlItem"); ddlItem.SelectedValue = dt.RowsIdea["ItemID"].ToString(); ddlItem.SelectedIndex = Convert.ToInt32(dt.RowsIdea["ID"]); items item = items.GetItem(itms, Convert.ToInt32(ddlItem.SelectedValue)); if (item != null) { addtoBasket.Add(item); } } rowIndex++; } } } return addtoBasket; }

    Κάθε βοήθεια είναι ευπρόσδεκτη.

    Ευχαριστώ εκ των προτέρων. 

    Δημοσίευση στην κατηγορία: ,
  •  28-05-2014, 09:22 75429 σε απάντηση της 75425

    Απ: GridView RowDataBound Event - Access more than one row

    Καλημέρα,

    Όχι, το event σου δίνει πρόσβαση μόνο στη γραμμή για την οποία σηκώθηκε το event.

    Αν θέλεις να κάνεις κάτι που θα έχει να κάνει με όλες τις γραμμές του gridview σου, το καλύτερο είναι να έχεις μια ακολουθία που θα τρέχει στο επίπεδο της σελίδας/control, παρά του event. Πχ. Θα μπορούσες με το binding του viewgrid να έκανες initialize την λίστα σου, και μετά μέσα στο rowdatabound event, να την διόρθωνες και να την έβαζες στο dropbox που την χρειάζεσαι. Η λίστα ζει έξω από το rowdatabound event, και έτσι οι επαναλήψεις του, διορθώνουν κάθε φορά την λίστα και την προσθέτουν στο control της γραμμής.

     

    George J. 


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

    Απ: GridView RowDataBound Event - Access more than one row

    Καλησπέρα,

    Ευχαριστώ καταρχάς για την απάντηση.

    Το θέμα είναι ότι οι τιμές κάθε row του grid εξαρτώνται από τις προηγούμενες. Ουσιαστικά προσπαθώ μέσω ενός gridview να υλοποιήσω ένα καλάθι αγορών. Όταν προσθέτω τις ίδιες τιμές σε κάθε row, δεν έχω πρόβλημα. Το πρόβλημα δημιουργείται όταν λαμβάνω υπόψιν μου τις προηγούμενες επιλεγμένες τιμές προκειμένου να δώσω την επιλογή στον χρήστη να επιλέξει μόνο από τις απομένουσες. Το ερώτημά μου είναι αν το dropdownlist θα πρέπει να γεμίζει στο rowdatabound event ή θα πρέπει να γεμίσει αρχικά με όλες τις τιμές στο πρώτο row και αφετέρου να γεμίζει σε κάθε προσθήκη νέου row λαμβάνοντας υπόψιν τις επιλεγμένες τιμές στα προηγούμενα. Στην απάντηση θα πρέπει να ληφθεί υπόψιν και το γεγονός ότι σε κάθε row του grid ο χρήστης μέσω του dropdownlist μπορεί να επιλέγει το item που θέλει και την ποσότητα και αυτόματα να ενημερώνεται η τελική του τιμή (μέσω PostBack).

    Ευχαριστώ. 

  •  28-05-2014, 14:22 75431 σε απάντηση της 75430

    Απ: GridView RowDataBound Event - Access more than one row

    Δηλαδή, θέλεις να δημιουργήσεις cascading dropdownlist(s). Δύο παραδείγματα μπορείς να βρεις στα παρακάτω links:

    1. Implement AJAX Cascading DropDown with DropDownList in GridView in ASP.Net
    2. How to implement cascading dropdownlist in gridview using asp.net
    Άμα κάνεις search στο Google πιθανόν να βρεις κι άλλες υλοποιήσεις.

    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  28-05-2014, 17:12 75432 σε απάντηση της 75431

    Απ: GridView RowDataBound Event - Access more than one row

    Ναι, αλλά σε επίπεδο column και όχι row, όπως στο παράδειγμα αυτό.

    Το κατάφερα ως έναν βαθμό διαλέγοντας στο rowdatabound την αμέσως προηγούμενη γραμμή και προσθέτοντας την επιλεγμένη τιμή του dropdownlist σε μια λίστα. Το θέμα είναι ότι θα πρέπει να βρω έναν τρόπο τώρα, ώστε να μην μπορεί ο χρήστης να ξαναεπιλέξει τις επιλεγμένες τιμές στα dropdownlist των προηγούμενων row, γιατί γίνεται ένα μπάχαλο μετά.

  •  29-05-2014, 09:51 75435 σε απάντηση της 75432

    Απ: GridView RowDataBound Event - Access more than one row

    Με μια πρόχειρη ματιά, αφού στην μέση μπαίνει το Ajax, το πρόβλημά σου είναι αρκετά πολύπλοκο, μιας και δεν μπορείς να χρησιμοποιήσεις το state της σελίδας για να αποθηκεύσεις πράγματα. Η λύση σε αυτό είναι είτε να χρησιμοποιήσεις το Session για να αποθηκεύσεις δεδομένα που θα ήθελες να έχεις πρόχειρα - την λίστα σου - είτε κάποιο singleton αντικείμενο που θα παίξει το ρόλο του persistence store...

       

    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