webForumDet fria alternativet

Problem med många textboxar

11 svar · 574 visningar · startad av saw

sawMedlem sedan mars 20011 880 inlägg
#1

Jag försöker att ta hand om flera textboxar så här:

private void rensaTextbox()
    {
        TextBox[] tBet = new TextBox();
        for(int i = 1;i<10;i++)
        {
            tBet[i].Text = "";
        }
    }

..och får då error

Det går inte att implicit konvertera typen System.Web.UI.WebControls.TextBox 
till System.Web.UI.WebControls.TextBox[]

Tacksam för förslag. :h

[REDIGERAT]
Jag försöker så här

TextBox[] tBet = new TextBox[10];
        for (int i = 0; i < 10; i++)
        {
            tBet[i] = new TextBox();
            tBet[i].Text = "0";
        }

Inga felmedelanden men ingenting händer...

NETworkMedlem sedan juni 20011 732 inlägg
#2

Nu skapar du bara en massa nya textboxobjekt, antar att du vill göra detta på redan befintliga? Du får loopa igenom alla kontroller på sidan, se efter om de är av typen textbox och sedan sätta värdt (eller tömma dem eller vad du försöker göra). Nåt i den här stilen:

protected void ClearAllTextBoxes() {
  foreach (Control c in Page.Controls) {
    // om det är en textbox, radera
    if ((c.GetType() == typeof(TextBox)))
      ((TextBox)(c)).Text = string.Empty;
  }
}

Har du andra kontroller som innehåller textboxar så kan du försöka kalla på funktionen rekursivt inne i foreach-loopen, modifiera den lite så att du tar kontrollen med kontroller som inparameter i funktionen.

NETworkMedlem sedan juni 20011 732 inlägg
#3

Hittade förresten ett javascript så slipper du göra en postback. :)

<script language="javascript" type="text/javascript">
function clearinputs(sType) {
  a = document.getElementsByTagName("input");
  for(i = 0; i < a.length; i++) {
    if(a[i].type==sType) {
      a[i].value = "";
    }
  }
}
</script>

<button onclick="clearinputs('text');">Reset</button>
sawMedlem sedan mars 20011 880 inlägg
#4

Hej.
Jag har inte testat java-scriptet men ditt första får jag inte att fungera.
Det är inga error, men ingenting händer.

NETworkMedlem sedan juni 20011 732 inlägg
#5

Hm, kanske inte är page-objektet du ska loopa igenom då... använder du master pages? Prova page.parent.controls?

edit, se näst sista inlägget i denna tråd:
http://forums.asp.net/t/1033056.aspx

sawMedlem sedan mars 20011 880 inlägg
#6

Hur jag än gör så blir det error med "objectsreferensen har ej angivits...".
Vad jag inte kan förstå är att om jag kan

tBet1.Text = "0";
        tBet2.Text = "0";
        tBet3.Text = "0";
        tBet4.Text = "0";
        tBet5.Text = "0";
        tBet6.Text = "0";

..ifrån codebehind, varför kan jag inte då göra en lop (som jag visade högst upp).
Jag förstår inte skillnaden.

freguzMedlem sedan feb. 2005280 inlägg
#7

jo man kan loopa mot namnen direkt, typ

for (int i = 1; i < 5; i++)
            {
                TextBox tbx = Page.FindControl("tb" + i) as TextBox;
                if(tbx != null)
                    tbx.Text = "";
            }

men beroende på din markup så kanske du måste loopa ifrån en placeholder istället, eller vad du nu har för föräldrakontroll till textboxarna.

NETworkMedlem sedan juni 20011 732 inlägg
#8

Problemet med en for-loop är också att du måste ge dina textboxar massa ful-idn (id1, id2, id3 osv), kanske inte ett problem men... testa detta, bör hitta och tömma alla dina textbox oavsett din sidstruktur:

protected void ClearAllTextBoxes(Control parent) {
  foreach (Control c in parent.Controls) {
    // om det är en textbox, töm
    if ((c.GetType() == typeof(TextBox)))
      ((TextBox)(c)).Text = string.Empty;

    // om du stöter på en kontroll som i sin tur innehåller kontroller
    if (c.HasControls)
      ClearAllTextBoxes(c);
  }
}

Anropa med ClearAllTextBoxes(this);

freguzMedlem sedan feb. 2005280 inlägg
#9

så länge det är alla texboxar som ska tömmas ja :bire

sawMedlem sedan mars 20011 880 inlägg
#10

Tack men...

Det går inte att konvertera metodgruppen HasControls till delegattypen bool. 
Tänkte du anropa metoden?
freguzMedlem sedan feb. 2005280 inlägg
#11

ska nog vara med parenteser

c.HasControls()
NETworkMedlem sedan juni 20011 732 inlägg
#12

freguz skrev:

så länge det är alla texboxar som ska tömmas ja :bire

Japp, det såklart. :) Skulle jag tömma en del av sidans textboxar så skulle jag lägga dem i en placeholder och så en foreach på den... Men ska man inte göra något som kräver postback så kör på javascriptet!

Självklart ska det vara parentes på HasControls... sorry!

133 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)