Avatar billede rumbassen Nybegynder
17. september 2004 - 14:13 Der er 9 kommentarer og
1 løsning

hvordan får jeg fat i indputtet fra mine dynemiske tekst bokse

Hej, jeg har lavet nogle dynamiske tekst bokse, kan i hjælpe mig med hvordan jeg får fat i det der nu bliver indtastet i dem under runtime.

jeg har oprettet dem således så jeg får 4 stk lige nu..:

private void Page_Init(object sender, System.EventArgs e)
{
  // Put user code to initialize the page here
  for (int i = 0; i < 4; i++)
  {
      TextBox tb = new TextBox();
      tb.ID = "tb" + i.ToString();
      al.Add(tb);
      PlaceHolder1.Controls.Add(tb);
  }
}
Avatar billede snepnet Nybegynder
17. september 2004 - 14:19 #1
foreach(Control c in this.PlaceHolder1.Controls)
{
  if(c is TextBox)
  {
      string result = ((TextBox)c).Text;
  }
}
Avatar billede snepnet Nybegynder
17. september 2004 - 14:19 #2
Var det sådan en du var ude efter ?
mvh
Avatar billede rumbassen Nybegynder
17. september 2004 - 14:31 #3
noget i den stil. Den fejler dog når jeg kører det.

Object reference not set to an instance of an object
Jeg kan ikke helt gennemskue det
Avatar billede rumbassen Nybegynder
17. september 2004 - 14:36 #4
Hvordan får jeg fat i den id jeg tildeler tb?
havde den ikke været dynamisk var det jo bare

string result = tb.Text;
Avatar billede snepnet Nybegynder
17. september 2004 - 15:32 #5
du kan lave en this.PlaceHolder1.FindControls("<dit id>");

Jeg kan ikke lige sige hvorfor du får en null-fejl... det er ikke så meget andet en PlaceHolder1 der kan være null.

du kan eventuelt lige poste lidt mere kode... så skal jeg tage en kigger.
mvh
Avatar billede Syska Mester
18. september 2004 - 15:39 #6
lytter med
Avatar billede rumbassen Nybegynder
20. september 2004 - 08:28 #7
private void Page_Load(object sender, System.EventArgs e)
{
    if (IsPostBack)
    {
        for (int i = 0; i < 10; i++)
        {
            if (al[i] is TextBox)
            Label1.Text += ((TextBox)al[i]).Text;
        }
    }
}
protected ArrayList al = new ArrayList();       

public void Page_Init(object sender, System.EventArgs e)
{
// Put user code to initialize the page here
    for (int i = 0; i < 10; i++)
    {
        TextBox tb = new TextBox();
        tb.ID = "tb" + i.ToString();
        al.Add(tb);
        PlaceHolder1.Controls.Add(tb);
    }
}
Avatar billede snepnet Nybegynder
20. september 2004 - 09:04 #8
Der er ingen grund til at du også vedligeholder et array med tekstboksene selv... De ligger i containeren (i det her tilfælde din placeholder).

private void Page_Load(object sender, System.EventArgs e)
{
    if (IsPostBack)
    {
        forearch(Control c in this.PlaceHolder1.Controls)
        {
            if (c is TextBox)
            Label1.Text += ((TextBox)c).Text;
        }
    }
}

public void Page_Init(object sender, System.EventArgs e)
{
// Put user code to initialize the page here
    for (int i = 0; i < 10; i++)
    {
        TextBox tb = new TextBox();
        tb.ID = "tb" + i.ToString();
        PlaceHolder1.Controls.Add(tb);
    }
}

men bortset fra det... er det så ikke i forbindelse med at der trykkes på en knap ell. at du ønsker at rutinen skal køre - og ikke i din page_load ?

altså sådan her (nu får du lige det hele i code-behind):

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace EXP2
{
    public class rumbassen : System.Web.UI.Page
    {
        protected HtmlForm Form1;
        protected Label lblSummery;
        protected PlaceHolder phContainer;
       
        private bool updated;

        private void Page_Load(object sender, System.EventArgs e)
        {
            InsertControls();
        }

        private void InsertControls()
        {
            // først en placeholder med tekstbokse
            phContainer = new PlaceHolder();
            for(int i=0;i<10;i++)
            {
                TextBox tb = new TextBox();
                tb.TextChanged += new EventHandler(tb_TextChanged);
                phContainer.Controls.Add(tb);
                phContainer.Controls.Add(new LiteralControl("<br>"));
            }

            // som indsættes på formen
            Form1.Controls.Add(phContainer);

            // så en label hvor det hele skrive ud.
            lblSummery = new Label();

            // som også sættes ind
            Form1.Controls.Add(lblSummery);

            // og så lige en knap så vi kan lave et postback
            // det kunne også bare have været i eventhandleren for den - at opdateringen skete
            Button btnPostback = new Button();
            btnPostback.Text = "Just a postback";
            Form1.Controls.Add(btnPostback);
        }

        private void tb_TextChanged(object sender, EventArgs e)
        {
            // opdaterer kun, hvis der er grund til det.
            if(!updated)
                Update();
        }

        private void Update()
        {
            // nulstiller lige summarylabel
            this.lblSummery.Text = String.Empty;

            // og smider tekstboksværdierne ind i lblSummary
            foreach(Control c in phContainer.Controls)
            {
                if(c is TextBox)
                {
                    lblSummery.Text += ((TextBox)c).Text;
                    lblSummery.Text += "<br>";
                }
            }

            // vi opdaterer jo her for alle texktbokse... og det behøver vi kun gøre én gang
            updated = true;
        }

        // VS standard
        override protected void OnInit(EventArgs e)
        {
            InitializeComponent();
            base.OnInit(e);
        }
       
        // VS standard
        private void InitializeComponent()
        {   
            this.Load += new System.EventHandler(this.Page_Load);
        }
    }
}

Bemærk at du ligeså godt kunne have foretaget opdateringen af din label i en handler for klikeventet på knappen.... men ovenstående er lavet på den måde, at uanset hvad det er der forårsager din postback, så vil din label blive opdateret, hvis bare én tekstboks har ændret værdi.

Du skal ikke angivet noget i din aspx-kode for at få dette til at fungere... hvis du opretter en ny form i VS - skal du bare sørge for at disse to linier passer :

namespace EXP2 // namespace kan du angive til det du arbejder i (i VS typisk public class rumbassen : System.Web.UI.Page // skift rumbassen ud med det du har kaldt din form

håber du kan bruge det til noget.

mvh
Avatar billede rumbassen Nybegynder
20. september 2004 - 15:13 #9
Mange mange tak. Det var super cool, lige det jeg skulle bruge.
Hvis du smider et svar så giver jeg lige lidt points.
Avatar billede snepnet Nybegynder
02. oktober 2004 - 02:13 #10
hov... her har jeg vist sovet lidt - sorry.
men... et svar her :o)
mvh
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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