DataList sofort laden

  • VB.NET (ASP)

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von GerhardW.

    DataList sofort laden

    Hallo,

    ich möchte das DataList beim Start oder jeder Änderung geladen wird. Leider bleibt DataList leer. Mein Code:

    VB.NET-Quellcode

    1. Protected Sub DataList2_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
    2. If MyVariablen.MyName = "" Then
    3. MyVariablen.MyName = "Camping Mustermann"
    4. Else
    5. MyVariablen.MyName = MyVariablen.MyName
    6. End If
    7. Dim strConnString As [String] = ConfigurationManager _
    8. .ConnectionStrings("conString").ConnectionString
    9. Dim strQuery As [String] = "Select * from Campingplatz where Name = @Name"
    10. Dim con As New MySqlConnection(strConnString)
    11. Dim cmd As New MySqlCommand()
    12. cmd.Parameters.AddWithValue("@Name", MySqlDbType.VarChar).Value = MyVariablen.MyName
    13. cmd.CommandType = CommandType.Text
    14. cmd.CommandText = strQuery
    15. cmd.Connection = con
    16. Try
    17. con.Open()
    18. DataList2.DataSource = cmd.ExecuteReader()
    19. DataList2.DataKeyField = "Name"
    20. DataList2.DataMember = "Name"
    21. DataList2.DataBind()
    22. Catch ex As Exception
    23. 'Throw ex
    24. Finally
    25. con.Close()
    26. con.Dispose()
    27. End Try
    28. End Sub


    Wer kann mir helfen?

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Was für ein Control soll DataList2 den sein? Vermutlich Combobox, also redest du von WinForms nehm ich weiter mal an.
    Was meinst Du mit "beim Start oder jede Änderung" eigentlich? und du weißt, dass SelectedIndexCahnged nur ausgelößtwird, wenn der ausgewählte(!) Eintrag sich ändert?
    Du weißt, dass Try-Catch ein heißes eisen ist? Fehler hast du gleich ganz weggebügelt, wie willst du da erfahren was falsch läuft? Mach das weg und debugge dich durch die Funktion des Ereignisses, falls es denn überhaupt aufgerufen wird.

    Lothar1951 schrieb:

    bleibt DataList leer
    Was auch immer „DataList“ ist, das hier: DataList2.DataSource = cmd.ExecuteReader() ist definitiv falsch. Denn der Rückgabewert ist nicht das, wofür du ihn hältst. Welchen Rückgabewert bekommst du denn beim Aufruf der Methode? Und welchen Datentypen benötigt diese ominöse „DataList“?

    @Dksksm Try/Catch ist nicht per se schlecht. Beim DB Zugriff kommt man im produktiv Betrieb ohne nicht aus (Timeout, Deadlock, …). Beim debuggen zwar hinderlich, hier aber nicht das Problem.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

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

    Du musst cmd.ExecuteReader() in eine DataTable umwandeln

    VB.NET-Quellcode

    1. Using dataReader As MySqlDataReader = cmd.ExecuteReader()
    2. DBTable = New DataTable
    3. DBTable.Load(dataReader)
    4. End Using
    5. DataList2.DataSource = DBTable
    6. DataList2.DataKeyField = "Name"
    7. DataList2.DataMember = "Name"
    8. DataList2.DataBind()


    Ob die Eigenschaften für DataList2 so passen, musst selber prüfen. Jedenfalls übergibst du eine DataTable ...
    Hallo,

    ich möchte das DataList (mein DataList2) beim Start oder jeder Änderung üben das Menü geladen wird. Leider bleibt DataList leer. Das geht:

    hauptseite.aspx:

    VB.NET-Quellcode

    1. <asp:DataList ID="DataList2" runat="server" DataSourceID="SqlDataSource2">
    2. <ItemTemplate>
    3. <table class="auto-style14">
    4. <tr>
    5. <td class="SchriftDatensatz">&nbsp;</td>
    6. <td class="CampingplatzName"><%# Eval("Name") %></td>
    7. </tr>
    8. ...
    9. </ItemTemplate>
    10. </asp:DataList>
    11. <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:campingConnectionString2 %>" ProviderName="<%$ ConnectionStrings:campingConnectionString2.ProviderName %>" SelectCommand="SELECT * FROM campingplatz where Name='Camping Mustermann'"></asp:SqlDataSource>

    Wenn man auf den Link klickt wird der Name an eine globale Variable übergeben (MyVariablen.MyName = Request.QueryString("Name")). Hauptseite.aspx nach Änderung:

    VB.NET-Quellcode

    1. <asp:DataList ID="DataList2" runat="server" OnSelectedIndexChanged="DataList2_SelectedIndexChanged">
    2. <ItemTemplate>
    3. ...
    4. </ItemTemplate>
    5. </asp:DataList>

    hauptseite.aspx.vb:

    VB.NET-Quellcode

    1. Protected Sub DataList2_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
    2. If MyVariablen.MyName = "" Then
    3. MyVariablen.MyName = "Camping Mustermann"
    4. Else
    5. MyVariablen.MyName = MyVariablen.MyName
    6. End If
    7. Dim strConnString As [String] = ConfigurationManager _
    8. .ConnectionStrings("conString").ConnectionString
    9. Dim strQuery As [String] = "Select * from Campingplatz where Name = @Name"
    10. Dim con As New MySqlConnection(strConnString)
    11. Dim cmd As New MySqlCommand()
    12. cmd.Parameters.AddWithValue("@Name", MySqlDbType.VarChar).Value = MyVariablen.MyName
    13. cmd.CommandType = CommandType.Text
    14. cmd.CommandText = strQuery
    15. cmd.Connection = con
    16. Try
    17. con.Open()
    18. DataList2.DataSource = cmd.ExecuteReader()
    19. DataList2.DataKeyField = "Name"
    20. DataList2.DataMember = "Name"
    21. DataList2.DataBind()
    22. Catch ex As Exception
    23. 'Throw ex
    24. Finally
    25. con.Close()
    26. con.Dispose()
    27. End Try
    28. End Sub

    Ich hoffe, jetzt ist es klarer!
    Bilder
    • Seeblick.jpg

      66,32 kB, 478×438, 103 mal angesehen
    • href.jpg

      6,39 kB, 398×25, 106 mal angesehen
    @GerhardW, dass mit dem DataReader war eine gute Idee! Jetzt habe ich folgenden Code, aber er funktioniert immer noch nicht. Eine andere Idee?

    VB.NET-Quellcode

    1. Protected Sub DataList2_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
    2. If Not IsPostBack Then
    3. If MyVariablen.MyName = "" Then
    4. MyVariablen.MyName = "Camping Mustermann"
    5. Else
    6. MyVariablen.MyName = MyVariablen.MyStrNameConn
    7. End If
    8. Dim As [String] = ConfigurationManager _
    9. .ConnectionStrings("conString").ConnectionString
    10. Dim strQuery As [String] = "Select * from Campingplatz where Name = @Name"
    11. Dim con As New MySqlConnection(strConnString)
    12. Dim cmd As New MySqlCommand()
    13. cmd.Parameters.AddWithValue("@Name", MySqlDbType.VarChar).Value = MyVariablen.MyName
    14. cmd.CommandType =
    15. CommandType.Text cmd.CommandText = strQuery
    16. cmd.Connection = con
    17. Try
    18. con.Open()
    19. DataReader As MySqlDataReader
    20. DataReader = cmd.ExecuteReader()
    21. If DataReader.HasRows Then
    22. While DataReader.Read
    23. End While
    24. End If
    25. DataReader.Close()
    26. DataList2.DataSource = cmd.ExecuteReader()
    27. DataList2.DataKeyField = "Name"
    28. DataList2.DataMember = "Name"
    29. DataList2.DataBind()
    30. Catch ex As Exception
    31. 'Throw ex
    32. Endlich
    33. con.Close()
    34. con.Dispose()
    35. End Try
    36. End If
    37. End Sub


    Gruss Lothar
    Also dieser Code macht nicht wirklich Sinn.

    VB.NET-Quellcode

    1. con.Open()
    2. DataReader As MySqlDataReader
    3. DataReader = cmd.ExecuteReader()
    4. If DataReader.HasRows Then
    5. While DataReader.Read
    6. End While
    7. End If
    8. DataReader.Close()
    9. DataList2.DataSource = cmd.ExecuteReader()
    10. DataList2.DataKeyField = "Name"
    11. DataList2.DataMember = "Name"
    12. DataList2.DataBind()


    Schau dir bitte einmal mein Beispiel an...