Avatar billede tinaw25 Nybegynder
06. oktober 2013 - 18:08 Der er 7 kommentarer og
1 løsning

hvordan får jeg den til at tælle alle textboxe?

Hej

Jeg har et panel, hvor der er en repeater og i repeater er der en textbox.
Der vil jeg godt have den til at når man indtaster noget i textbox skal den tælle alt indholdet og sætte det i en label.
Jeg har fået den til at tælle nu, men har indsat koden de antal gange som jeg vil have den til at tælle.

Skal jeg evt bruge en foreach til at løbe den igennem til der ikke er flere?

Nogle der evt kunne hjælpe med den foreach for kan simpelthen ikke se hvad jeg gør forkert?

Default.aspx

<asp:Panel ID="Panel_visfrugt" runat="server">
        <table border="1">
            <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="SELECT * FROM [frugt]"></asp:SqlDataSource>
            <tr>
                <td>Antal</td>
                <td><asp:Label ID="Label1" runat="server" Text=""></asp:Label></td>
            </tr>
            <asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1" OnItemCommand="Repeater1_ItemCommand">
                <ItemTemplate>

           
            <tr>
                <td><%#Eval("frugt_navn") %></td>
                <td><asp:TextBox ID="txtbox1" runat="server" Width="30"></asp:TextBox></td>
            </tr>
           
    </ItemTemplate>
            </asp:Repeater>
        </table>
   
    <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click1" />
    </asp:Panel>

Default.aspx.cs

protected void Button1_Click1(object sender, EventArgs e)
    {
        foreach (RepeaterItem item in Repeater1.Items)
        {
            if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
            {
                TextBox Textbox_antal = item.FindControl("txtbox1") as TextBox;
                int antal = 0;

                int i = int.Parse(Textbox_antal.Text) + int.Parse(Textbox_antal.Text) + int.Parse(Textbox_antal.Text) + int.Parse(Textbox_antal.Text) + int.Parse(Textbox_antal.Text) + int.Parse(Textbox_antal.Text) + int.Parse(Textbox_antal.Text) + int.Parse(Textbox_antal.Text);

                if (antal != 7)
                {

                    Label1.Text = "Nu er der 7";
               
                }
             
                else
                {
                    Label1.Text = "Der er over 8 nu";
                }
             



            }

        }
     
    }

Tina
Avatar billede anri Novice
06. oktober 2013 - 21:50 #1
Hvis jeg har forstået dit problem korrekt, så skal du initialisere din tæller "i" uden for din foreach Løkke, ellers nulstiller du for hver textbox.

Derudover så tager dine gentagelser af int.parse(textbox_antal.text) jo fat i den samme control i hvert repetere item.
Avatar billede tinaw25 Nybegynder
06. oktober 2013 - 22:52 #2
Hvis jeg gør sådan her:

protected void Button1_Click1(object sender, EventArgs e)
    {
        int i = int.Parse(Textbox_antal.Text);
        foreach (RepeaterItem item in Repeater1.Items)
        {
            if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
            {
                TextBox Textbox_antal = item.FindControl("txtbox1") as TextBox;
                int antal = 0;

               

                if (antal != 7)
                {

                    Label1.Text = "Nu er der 7";
               
                }
             
                else
                {
                    Label1.Text = "Der er over 8 nu";
                }
             



            }

        }
     
    }

Så kan jeg slet ikke finde min textbox, som er inde i en repeater. Men skal jeg så evt lave en ny foreach lykke?
Avatar billede anri Novice
07. oktober 2013 - 07:53 #3
Det er fordi du forsøger at finde tekstboksen uden at have fat i det enkelte repeater-item.
Her er et eksempel:
i kommer til at indholde summen af de numre der står i tekstboksene.
antal er antallet af tekstbokse.

protected void Button1_Click1(object sender, EventArgs e)
    {
        int i = 0; //Initialiser tælleren udenfor loopet.
        int antal = 0;
        foreach (RepeaterItem item in Repeater1.Items)
        {
            if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
            {
                TextBox Textbox_antal = item.FindControl("txtbox1") as TextBox;
        i += int.Parse(Textbox_antal.Text);


antal ++;
               
            }

        }
     
//Her er "i" og "antal" talt færdig.
                if (antal <= 7)
                {

                    Label1.Text = "Nu er der 7";
               
                }
             
                else
                {
                    Label1.Text = "Der er over 8 nu";
                }
    }
Avatar billede tinaw25 Nybegynder
07. oktober 2013 - 22:26 #4
Det er selvfølgelig rigtig, hvor blind kan man være. Jeg prøver lige koden i morgen men ellers smid et svar
Avatar billede anri Novice
08. oktober 2013 - 07:41 #5
Yeps
Avatar billede tinaw25 Nybegynder
08. oktober 2013 - 09:47 #6
Men den tæller kun textboxe, den skal tælle det man indtaster i textboxen
Avatar billede anri Novice
08. oktober 2013 - 10:15 #7
Det burde den gøre i variablen "i", hvor "antal" jo er... ..ja, antallet.

(i mit eksempel)
Avatar billede anri Novice
08. oktober 2013 - 10:21 #8
og hvis nu du ikke er sikker på, at det er tal der er i tekstboksene så lav følgende

int parsedInt = 0;
if(!int.TryParse(TextBox_Antal.Text, out parsedInt))
TextBox_Antal.BackColor = System.Drawing.Color.Red;

i += parsedInt;

Så springer den bare ugyldige værdier over, men maler den ugyldige tekstbox rød.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester