Gerade als Umsteiger von ASP stellt sich häufig die Frage: Wie kann man Controls finden und deren Inhalt verwenden? Im folgenden Beispiel wird mittels einer HashTable ein DataRepeater gefüllt und entsprechend TextBoxen angezeigt. Dort können Zahlen eingegeben werden die bei Klick auf einen Button addiert werden.
Hier erstmal der ASPX Code:
<body> <form id="Form1" method="post" runat="server"> <asp:label id="lblSumme" runat="server"></asp:label><br> <asp:repeater id="Repeater1" runat="server"> <itemtemplate> <%# DataBinder.Eval(Container.DataItem, "value") %> <br> <asp:textbox id="summe" runat="server"></asp:textbox> <asp:rangevalidator id="rv1" runat="server" controltovalidate="summe" display="Dynamic" maximumvalue="10" minimumvalue="1" errormessage="Bitte einen Wert zwischen 1 und 10 eingeben!" type="Integer">*</asp:rangevalidator><hr> </itemtemplate> </asp:repeater> <asp:button id="btnSumme" runat="server" text="Berechnen"></asp:button><br> <br> <asp:validationsummary id="vs1" runat="server"></asp:validationsummary> </form> </body>
|
Code:
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load If Not (IsPostBack) Then daten() End If End Sub
Private Sub daten() Dim myHash As New Hashtable myHash.Add("0", "Wert1") myHash.Add("1", "Wert2") myHash.Add("2", "Wert3") Repeater1.DataSource = myHash Repeater1.DataBind() End Sub
Private Sub btnSumme_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSumme.Click Dim summe As Integer ' Im Repeater die Controls durchlaufen ' Ein Schleifendurchlauf entspricht einer Zeile For Each c As Control In Repeater1.Controls ' Die entsprechende Zeile durchlaufen und auf ' Controls in der Zeile prüfen For i As Integer = 0 To c.Controls.Count - 1 ' Wenn ein Control vom Typ TextBox ist dann ' casten und den Wert zu summe addieren If (TypeOf c.Controls(i) Is TextBox) Then Dim txt As TextBox = CType(c.Controls(i), TextBox) ' Prüfen ob die TextBox auch gefüllt wurde If Not (txt.Text = Nothing) Then summe += CType(txt.Text, Integer) End If End If Next Next ' Dem Label Summe den Wert zuweisen lblSumme.Text = "<strong>Summe: " & summe.ToString() & "<br></strong>" End Sub
|
In der ersten For Schleife wird die Collection des Repeaters durchlaufen um die Controls einer jeweiligen Zeile zu ermitteln.
Die zweite For Schleife braucht man um die entsprechende Zeile zu durchlaufen.
Mit der If Abfrage wird geprüft ob es sich beim dem Control um eine TextBox handelt. Wenn dies der Fall ist wird das Control zur TextBox gecastet und der Wert addiert.
Am Ende der Schleifen wird die ermittelte Summe in ein Label geschrieben.