cascadierende DropDownList

  • VB.NET (ASP)

Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    cascadierende DropDownList

    Bei Land (Code nicht dabei) und Bundesland geht es. Bei Region leider nicht. Auch wenn ich "where" weglasse, geht es nicht. idBundesland wird nicht angesprungen, hab schon sehr vieles ohne Erfolg probiert. Arbeite schon 3 Wochen an einer Lösung.

    VB.NET-Quellcode

    1. Protected Sub idLand_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
    2. DropDownBundesland.Items.Clear()
    3. DropDownBundesland.Items.Add(New ListItem("--Select Bundesland--", ""))
    4. DropDownRegion.Items.Clear()
    5. DropDownRegion.Items.Add(New ListItem("--Select Region--", ""))
    6. DropDownBundesland.AppendDataBoundItems = True
    7. Dim strConnString As [String] = ConfigurationManager _
    8. .ConnectionStrings("conString").ConnectionString
    9. Dim strQuery As [String] = "Select Bundesland, idBundesland, idLand from Campingplatz where idLand = @LandID Group BY Bundesland ORDER BY Bundesland ASC"
    10. Dim con As New MySqlConnection(strConnString)
    11. Dim cmd As New MySqlCommand()
    12. cmd.Parameters.AddWithValue("@LandID", MySqlDbType.Decimal).Value = DropDownLand.SelectedItem.Value
    13. cmd.CommandType = CommandType.Text
    14. cmd.CommandText = strQuery
    15. cmd.Connection = con
    16. Try
    17. con.Open()
    18. DropDownBundesland.DataSource = cmd.ExecuteReader()
    19. DropDownBundesland.DataTextField = "Bundesland"
    20. DropDownBundesland.DataValueField = "idBundesland"
    21. DropDownBundesland.DataBind()
    22. If DropDownBundesland.Items.Count > 1 Then
    23. DropDownBundesland.Enabled = True
    24. Else
    25. DropDownBundesland.Enabled = False
    26. DropDownRegion.Enabled = False
    27. End If
    28. Catch ex As Exception
    29. 'Throw ex
    30. Finally
    31. con.Close()
    32. con.Dispose()
    33. End Try
    34. End Sub
    35. Protected Sub idBundesland_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
    36. DropDownRegion.Items.Clear()
    37. DropDownRegion.AppendDataBoundItems = True
    38. Dim strConnString As [String] = ConfigurationManager.ConnectionStrings("conString").ConnectionString
    39. Dim strQuery As [String] = "Select Region, idLand, idBundesland from Campingplatz where idLand = @LandID and idBundesland = @BundeslandID Group BY Region ORDER BY Region ASC"
    40. Dim con As New MySqlConnection(strConnString)
    41. Dim cmd As New MySqlCommand()
    42. cmd.Parameters.AddWithValue("@BundeslandID", MySqlDbType.Decimal).Value = DropDownBundesland.SelectedItem.Value
    43. cmd.CommandType = CommandType.Text
    44. cmd.CommandText = strQuery
    45. cmd.Connection = con
    46. Try
    47. con.Open()
    48. DropDownRegion.DataSource = cmd.ExecuteReader()
    49. DropDownRegion.DataTextField = "Region"
    50. DropDownRegion.DataValueField = "idRegion"
    51. DropDownRegion.DataBind()
    52. If DropDownRegion.Items.Count > 1 Then
    53. DropDownRegion.Enabled = True
    54. Else
    55. DropDownRegion.Enabled = False
    56. End If
    57. Catch ex As Exception
    58. 'Throw ex
    59. Finally
    60. con.Close()
    61. con.Dispose()
    62. End Try
    63. End Sub


    CodeTags gesetzt ~VaporiZed

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Willkommen im Forum.

    Setzt Du die Event-EventHandlerverbindung mit AddHandler manuell? Weil hinter den Methodenköpfen normalerweise ein Handles kommt, also z.B. Protected Sub idLand_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles idLand.SelectedIndexChanged. Falls Du das nicht machst, wird die Methode gar nicht aufgerufen …

    Dein Post klingt aber, als ob Du gar kein neues Thema anfangen, sondern jemandem antworten wolltest.

    Lothar1951 schrieb:

    Bei Land (Code nicht dabei) und Bundesland geht es. Bei Region leider nicht. Auch wenn ich "where" weglasse, geht es nicht.
    Was ist es? Pennywise?

    Lothar1951 schrieb:

    idBundesland wird nicht angesprungen
    Den Satz versteh ich inhaltlich nicht. Ich bitte um Klärung.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Tja, da meine Fragen unbeantwortet bleiben, warte ich erstmal, bis sich das ändert.
    Danach wär zwar mein nächster Tipp, strQuery nochmal neu aufzusetzen (und bei allen [String]-Vorkommen die eckigen Klammern zu entfernen, aber das nur nebenbei), angefangen bei der einfachsten Abfrage, um zu sehen, ab wann es nicht mehr zum gewünschten Ergebnis führt, weil ja keiner hier außer Dir den Datenbankinhalt kennt, aber das wäre Schritt 3.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    strQuery und [String] hat leider nicht geholfen!

    Ich habe jetzt eine Variable eingefügt und sichtbar gemacht. Es wird die richtige Zahl übergeben.

    VB.NET-Quellcode

    1. Protected Sub idBundesland_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
    2. DropDownRegion.Items.Clear()
    3. DropDownRegion.Items.Add(New ListItem("--Select City--", ""))
    4. DropDownRegion.AppendDataBoundItems = True
    5. Dim strConnString As [String] = ConfigurationManager _
    6. .ConnectionStrings("conString").ConnectionString
    7. Dim strQuery As [String] = "Select Region, idLand, idBundesland from Campingplatz Group BY Region ORDER BY Region ASC"
    8. Dim con As New MySqlConnection(strConnString)
    9. Dim cmd As New MySqlCommand()
    10. cmd.Parameters.AddWithValue("@BundeslandID", MySqlDbType.Decimal).Value = DropDownBundesland.SelectedItem.Value
    11. MyVariablen.MyidLand = DropDownBundesland.SelectedItem.Value
    12. cmd.CommandType = CommandType.Text
    13. cmd.CommandText = strQuery
    14. cmd.Connection = con
    15. Try
    16. con.Open()
    17. DropDownRegion.DataSource = cmd.ExecuteReader()
    18. DropDownRegion.DataTextField = "Region"
    19. DropDownRegion.DataValueField = "idRegion"
    20. DropDownRegion.DataBind()
    21. If DropDownRegion.Items.Count > 1 Then
    22. DropDownRegion.Enabled = True
    23. Else
    24. DropDownRegion.Enabled = False
    25. End If
    26. Catch ex As Exception
    27. 'Throw ex
    28. Finally
    29. con.Close()
    30. con.Dispose()
    31. End Try
    32. End Sub


    CodeTags gesetzt ~VaporiZed

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VaporiZed“ ()

    Lothar1951 schrieb:

    strQuery […] hat leider nicht geholfen!
    Ich habe wirklich keine Ahnung, was Du damit sagen willst. Meine Aussage war ja

    VaporiZed schrieb:

    strQuery nochmal neu aufzusetzen […], angefangen bei der einfachsten Abfrage, um zu sehen, ab wann es nicht mehr zum gewünschten Ergebnis führt
    Das heißt, den Query-String nicht so komplex zu gestalten, sondern eine einfache DB-Abfrage zu starten und dann langsam auszubauen, um zu testen, ab wann keine (passenden) Daten mehr kommen.

    Lothar1951 schrieb:

    Ich habe jetzt eine Variable eingefügt und sichtbar gemacht.
    Da kann ich Dir leider nicht folgen. Variable einfügen? Sichtbar machen? Welche Intention steckt dahinter?

    Lothar1951 schrieb:

    Es wird die richtige Zahl übergeben.
    Du sprichst in Rätseln.
    Ich habe das Gefühl, dass ich Dir hier doch nicht weiterhelfen kann. Vielleicht kann jemand anderes was mit dem Problem und all den (für mich kryptischen) Aussagen anfangen.
    Sorry.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Weis leider auch nicht, warum ich nicht verstanden werde. Also noch mal:

    Ich habe 3 cacadierende DropDownListen (Land, Bundesland, Region), die sich nur durch die id unterscheiden (idLand, idBundesland, idRegion). Ich verwende immer den gleichen Code, außer AddWithValue. Trotzdem bleit die DropDownListe leer. Anbei der relevante Code:

    <asp:DropDownList ID="DropDownRegion" runat="server" AutoPostBack="True" OnSelectedIndexChanged="idRegion_SelectedIndexChanged">
    <asp:ListItem Text = "--Select Region--" Value = ""></asp:ListItem>
    </asp:DropDownList>

    danach:

    VB.NET-Quellcode

    1. Protected Sub idRegion_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
    2. DropDownRegion.Items.Clear()
    3. DropDownRegion.AppendDataBoundItems = True
    4. Dim strConnString As [String] = ConfigurationManager.ConnectionStrings("conString").ConnectionString
    5. Dim strQuery As [String] = "Select Region, idLand, idBundesland, idRegion from Campingplatz Group BY Region ORDER BY Region ASC"
    6. Dim con As New MySqlConnection(strConnString)
    7. Dim cmd As New MySqlCommand()
    8. cmd.Parameters.AddWithValue("@RegionID", MySqlDbType.Decimal).Value = DropDownBundesland.SelectedItem.Value
    9. cmd.CommandType = CommandType.Text
    10. cmd.CommandText = strQuery
    11. cmd.Connection = con
    12. Try
    13. con.Open()
    14. DropDownRegion.DataSource = cmd.ExecuteReader()
    15. DropDownRegion.DataTextField = "Region"
    16. DropDownRegion.DataValueField = "idRegion"
    17. DropDownRegion.DataBind()
    18. If DropDownRegion.Items.Count > 1 Then
    19. DropDownRegion.Enabled = True
    20. Else
    21. DropDownRegion.Enabled = True
    22. End If
    23. Catch ex As Exception
    24. 'Throw ex
    25. Finally
    26. con.Close()
    27. con.Dispose()
    28. End Try
    29. End Sub

    Bitte um Hilfe!

    CodeTags gesetzt ~VaporiZed

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Zunächstmal bezweifel ich, dass dieses Sql ohne Fehler ausgeführt werden kann:

    Lothar1951 schrieb:

    SQL-Abfrage

    1. Select Region, idLand, idBundesland, idRegion from Campingplatz Group BY Region ORDER BY Region ASC
    In dem Sql, wsa ich kenne, verhindert Group by, das andere Felder abgerufen werden, als nach denen gruppiert wird.

    Dann weiss ich nicht, ob

    VB.NET-Quellcode

    1. DropDownRegion.DataSource = cmd.ExecuteReader()
    ob irgendetwas befüllt wird, wenn als Datasource keine Daten, sondern ein DbDataReader zugewiesen wird.
    Aber dieses DropDownRegion ist mir auch unbekannt, wird wohl etwas sein von einem Dritt-Anbieter.

    ErfinderDesRades schrieb:

    In dem Sql, wsa ich kenne, verhindert Group by, das andere Felder abgerufen werden, als nach denen gruppiert wird.
    Sehe ich genauso.
    Zumindest in MS-SQL ergäbe so was eine Fehlermeldung der Art
    Column 'idLand' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
    Welches DB-System verwendest du?
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Mag sein, dass da MySql irgendetwas interpretiert und den GROUP BY Teil des Statements semiintelligent automatisch erweitert.
    Aber auch die MySql-Syntax sieht das Weglassen der Group Member offiziell nicht vor.
    Diese Pseudo-Intelligenz ist jedenfalls in keiner MySql-Dokumentation beschrieben.

    Schon allein, um die Kompatibilität zu anderen SQL-Syntaxen zu gewährleisten, würde ich es auf jeden Fall "richtig" schreiben.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    SQL-Abfrage

    1. ​Select Region, idLand, idBundesland, idRegion from Campingplatz Group BY Region, idLand, idBundesland, idRegion ORDER BY Region ASC

    Du musst in der Gruppe alle Spalten aufzählen, die nicht aggregiert sind.
    Was geht, ist so was:

    SQL-Abfrage

    1. SELECT Region, idLand, idBundesland, idRegion, COUNT(CampingplatzId) AS PlatzCount FROM Campingplatz GROUP BY Region, idLand, idBundesland, idRegion ORDER BY Region ASC
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Ich habe jetzt zu Testzwecken

    SQL-Abfrage

    1. Select Region from Campingplatz ORDER BY Region ASC


    eingegeben, leider immer noch das gleiche Problem. Region ist nicht da. Brauche unbedingt Hilfe. Land und Bundesland gehen.

    Code-Tags eingefügt. ~Thunderbolt

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Thunderbolt“ ()

    Ich habe es gelöst. Jetzt wird auch die Region angezeigt. Die ausgewählte Region möchte ich an ein DataList übergeben, aber es funktioniert nicht. Brauch noch mal Hilfe. Anbei mein Code:

    <asp:TemplateField>
    <ItemTemplate>
    <asp:DataList ID="DataListName" runat="server" Text='<%# Eval("Name") %>'>
    </asp:DataList>
    </ItemTemplate>
    </asp:TemplateField>

    und
    Protected Sub idRegion_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
    Dim strConnString As [String] = ConfigurationManager.ConnectionStrings("conString").ConnectionString
    Dim strQuery As [String] = "Select * from Campingplatz where idLand =@LandID and idBundesland = @BundeslandID and idRegion = @RegionID ORDER BY Name ASC"
    Dim con As New MySqlConnection(strConnString)
    Dim cmd As New MySqlCommand()
    cmd.Parameters.AddWithValue("@LandID", MySqlDbType.Decimal).Value = DropDownLand.SelectedItem.Value
    cmd.Parameters.AddWithValue("@BundeslandID", MySqlDbType.Decimal).Value = DropDownBundesland.SelectedItem.Value
    cmd.Parameters.AddWithValue("@RegionID", MySqlDbType.Decimal).Value = DropDownRegion.SelectedItem.Value
    cmd.CommandType = CommandType.Text
    cmd.CommandText = strQuery
    cmd.Connection = con
    Try
    con.Open()
    DataListName.DataSource = cmd.ExecuteReader()
    DataListName.DataBind()
    Catch ex As Exception
    'Throw ex
    Finally
    con.Close()
    con.Dispose()
    End Try
    End Sub