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

 

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

Callback και Parameter Name: index

Îåêßíçóå áðü ôï ìÝëïò epp1123. Τελευταία δημοσίευση από το μέλος epp1123 στις 08-08-2008, 16:20. Υπάρχουν 1 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  07-08-2008, 14:04 43983

    Callback και Parameter Name: index

    Καλησπέρα καλησπέρα. Αποφάσισα και εγώ σαν παιδί να φτιάξω ένα callback αλλά αυτός ο καταραμένος ο index (παραλαγή του καταραμένου όφι) αποφάσισε να μας ταλαιπωρήσει.

    Αλλά ας πάρουμε τα πράγματα από την αρχή.

    Έχω δύο dropdownlists. Η δευτέρη λίστα γεμίζει ανάλογα της επιλογής που έχει γίνει στην πρώτη. Μέχρι τώρα είχα στην πρώτη DDL ενεργοποιημένο το autopostback και εκεί μέσα είχα τον κώδικα για να γεμίζει την δεύτερη DDL. Όλα καλά και όλα ωραία. Αλλά να που τα δεδομένα γίνανε περισσότερα και όταν γίνεται post back ο χρήστης πρέπει να περιμένει κάποια secs για να φορτώσει η σελίδα, οπότε είπα ότι καλύτερα να το κάνω με callback στην πλευρά του client.

    Το πρόβλημα που παρουσιάζεται είναι το εξής:

    Όταν φορτώνει η σελίδα όλα καλά. Κάνω την πρώτη επιλογή μου στην πρώτη DDL (όποια να είναι από τη λίστα μέσα) και βλέπω πως η δεύτερη DDL γεμίζει αναλόγως. Όταν πάω να επιλέξω μία νέα επιλογή από την πρώτη DDL τότε μου πετάει ένα popup το οποίο λέει "Parameter Name: index". Λογικά το λάθος θα είναι του στυλ out of range, αυτό είδα ως πιο πιθανό σφάλμα μετά από γουγλοέρευνα, αλλά δεν μπορώ να καταλάβω ακριβώς που χτυπάει. Το ψάχνω εδώ και ένα δίωρο αλλά τίποτα. Σας δίνω τον κώδικα

    Οι DDL είναι δύο

    1. Κατασκευαστές αυτοκινήτων
    2. Μοντέλα αυτοκινήτων

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <script type="text/jscript">
    function BringModels(control) //Η function άυτή είναι στη ddl του κατασκευαστή
    {
    CarModelDDL.SetSelectedIndex(-1);
    CarModelDDL.SetEnabled(CarManufacturerDDL.GetSelectedIndex() > 0);
    if(control.GetValue() != "") {
    CarModelDDL.PerformCallback(control.GetValue());
    CarModelDDL.SetFocus();
    }

    }
    </script>


    Βάζουμε την ddl των μοντέλων ως απενεργεποιημένη για default τιμή
    1
    2
    3
    4
    5
    6
     Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs)

    If (Not IsCallback) Then
    CarModelDDL.SelectedIndex = -1
    CarModelDDL.ClientEnabled = False
    End If

    Ο κώδικας που βρίσκεται μέσα στο callback του μοντέλου
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
        Protected Sub CarModelDDL_Callback(ByVal source As Object, ByVal e As DevExpress.Web.ASPxClasses.CallbackEventArgsBase)
    '==============================================================================
    'Μοντέλο - Αρχή
    '==============================================================================

    'Δημιουργούμε ένα connection String για την Βάση
    Dim ModelsSQLConnectionString As String = ConfigurationManager.ConnectionStrings("CarAndBikesConnectionString").ConnectionString

    'Δημιουργούμε ένα Connection για να συνδεθούμε στη βάση και του δίνουμε το Connection String
    Dim ModelsSQLConnection As New Data.SqlClient.SqlConnection
    ModelsSQLConnection.ConnectionString = ModelsSQLConnectionString

    'Δημιουργούμε το SQL Command
    Dim ModelsSQLSelectCommand As New Data.SqlClient.SqlCommand
    ModelsSQLSelectCommand.CommandText = "SELECT DISTINCT CarModels.CarModels_ID, CarModels.CarModels_Value FROM Cars INNER JOIN CarModels ON Cars.Cars_ModelID = CarModels.CarModels_ID INNER JOIN Manufacturers ON CarModels.CarModels_ManufacturerID = " & e.Parameter
    ModelsSQLSelectCommand.Connection = ModelsSQLConnection

    'Δημιουργούμε έναν νέο adapter και θέτουμε το Select SQL στον adapter
    Dim ModelsSQLAdapter As New Data.SqlClient.SqlDataAdapter
    ModelsSQLAdapter.SelectCommand = ModelsSQLSelectCommand

    'Ανοίγουμε τη σύνδεση με τη βάση
    ModelsSQLConnection.Open()

    'Δημιουργούμε ένα DataSet
    Dim ModelsDataSet As New Data.DataSet

    'Γεμίζουμε το DataSet
    ModelsSQLAdapter.Fill(ModelsDataSet)
    ModelsSQLAdapter.FillSchema(ModelsDataSet, Data.SchemaType.Source)

    'Κλείνουμε τη σύνδεση με τη βάση
    ModelsSQLConnection.Close()
    ModelsSQLConnection.Dispose()

    'Βάζουμε τα δεδομένα σε έναν πίνακα
    Dim dtModels As Data.DataTable = ModelsDataSet.Tables(0)
    dtModels.TableName = "Models"

    Dim drModels As Data.DataRow = dtModels.NewRow

    drModels(0) = 0
    drModels(1) = ""

    dtModels.Rows.Add(drModels)

    dtModels.AcceptChanges()

    Dim dvModels As New Data.DataView(dtModels)

    dvModels.Sort = "CarModels_Value"

    CarModelDDL.DataSource = dvModels
    CarModelDDL.TextField = dtModels.Columns.Item(1).ToString
    CarModelDDL.ValueField = dtModels.Columns.Item(0).ToString
    CarModelDDL.DataBind()


    '==============================================================================
    'Μοντέλο - Τέλος
    '==============================================================================
    End Sub

  •  08-08-2008, 16:20 44008 σε απάντηση της 43983

    Απ: Callback και Parameter Name: index

    Την απάντηση την βρήκα από σπόντα αλλά θα ήθελα κάποιος να μου εξηγήσει το γιατί.

    Στην σειρά 43, έχω drModel(1) = "". Εξαιτίας αυτού χτυπούσε. Επίσης και το με το  drModel(1) = " " χτυπούσε. Με που το άλλαξα σε drModels(1) = "<Επιλογή όλων...>" παίζει μία χαρά.

    Ερωτώ τώρα, τι σχέση έχει το pararameter name : index με αυτό; Όταν το είχα με το autopostback = true χωρίς να μπλέξω με js δούλευε μια χαρά.
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems