Kürzlich hatte ich in einem Shop-System das Problem in einem Repeater die zu einem Artikel angegebene Stückzahl für die weitere Verarbeitung einzulesen.
Die ID der Textbox im Repeater kann man nicht dynamisch vergeben, <asp:TextBox ID="<%#eval("wert")%>" runat="server"> geht also nicht.
Mein Lösungsweg war der folgende:
Einer Funktion (insertWK) wird mit CommandArgument ein Wert übergeben (in meinem Fall die Artikelnummer):
<asp:LinkButton ID="linkbutton" CommandArgument='<%#Eval("artnr")%>' runat="server" oncommand="insertWK">
- in einer Schleife die Zeilen des Repeaters einzelnen durchgehen
- in dieser Zeile den Wert des Textfeldes einlesen
- in dieser Zeile den Wert des Commandargument des Linkbuttons einlesen
- wenn der Wert des Commandargumentes dieser Zeile mit dem an die Funktion übergebenen Wert übereinstimmt, dann steht in der Textbox dieser Zeile des Repeaters die eingegebene Anzahl zu diesem Artikel
- der Wert kann dann weiterverarbeitet werden
Und hier der Quellcode der Funktion:
Sub insertWK(ByVal sender As Object, ByVal e As CommandEventArgs)
Dim artnr As String
Dim str, anzahl As String
Dim i As Int16
artnr = e.CommandArgument.ToString()
'*** jede Zeile des Repeaters durchgehen
For Each con As Control In Repeater1.Controls
anzahl = ""
'*** Controls dieser Zeile durchgehen
For i = 0 To con.Controls.Count - 1
If (TypeOf con.Controls(i) Is TextBox) Then
Dim txt As TextBox = CType(con.Controls(i), TextBox)
anzahl = txt.Text
End If
If (TypeOf con.Controls(i) Is LinkButton) Then
Dim link As LinkButton = CType(con.Controls(i), LinkButton)
'***wenn in der richtigen Zeile
If artnr = link.CommandArgument.ToString Then
Try
'*** gefunden
anzahl = CType(anzahl.ToString, Integer)
' Daten weiterverarbeiten
Catch
MsgBox("Es wurde kein gültiger Wert eingegeben")
End Try
End If
End If
Next
Next
End Sub