[ rako88 @ 04.05.2011. 17:58 ] @
Radi se o mnozenju matrica, na jednoj stranici korisnik definise dimenzije matrica i klikom na dugme ispod se dinamicki generisu textbox-ovu u obliku matrica. Kod za dodavanje matrica ide ovako:
Code:
for (i = 0; i <= 9; i++)
            {
                for (j = 0; j <= 9; j++)
                {
                    TextBox tb = new TextBox();
                    b++;
                    tb.ID = "t" +b;
                    Panel1.Controls.Add(tb);
                    tb.Height = Unit.Pixel(20);
                    tb.Width = Unit.Pixel(20);
               }
                Panel1.Controls.Add(new LiteralControl("<br/>"));
            }


I to radi, ali je problem je da pokupim vrednosti iz tih textbox-ova. Za pristupanje textbox-ovima sam koristio foreach petlju unutar Panel-a. Kod igleda ovako:
Code:
foreach (Control c in Panel1.Controls)
            {
                if (c is TextBox)
                {
                    tb = c as TextBox;
                    if( tb.Text != "" )
                        s += int.Parse(tb.Text);
                }
            }


Koliko sam ja shvatio, petlja uopste ne vidi ove textbox-ove. Citajuci teme internetom sa nasao par odgovora koji kazu da ovo dinamicko dodavanje mora biti u Page_Load metodu. To sam probao, napravio sam dve stranice od kojih je prva za definisanje dimenzija matrice i ona prosledjuje velicine drugoj stranici koja ih prihvata i u Page_Load metodu dodaje textbox-ove. Tako dodatim textbox-ovima mogu da pristupim preko foreach petlje. U cemu je problem, da li stvarno mora da ide u Page_Load?









[Ovu poruku je menjao rako88 dana 05.05.2011. u 14:41 GMT+1]
[ pl4stik @ 04.05.2011. 19:12 ] @
http://www.asp.net/ajax/videos...lly-add-controls-to-a-web-page

[ rako88 @ 05.05.2011. 14:32 ] @
Prvo, hvala na odgovoru. Pogledao sam video, i cini mi se komplikovano. :) Drugo, video mi je dao inspiraciju pa sam istrazivao i nasao "resenje" problema. Sada nisam siguran koliko je to resenje dobro, ali evo koda pa me interesuju vasa misljenja.
Code:
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Vezba_Dyn
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (ViewState["xx"] != null)
            {
                TextBox1.Text = ViewState["xx"].ToString();
                TextBox2.Text = ViewState["yy"].ToString();
                Mreza(int.Parse(TextBox1.Text),int.Parse(TextBox2.Text));
            }
        }

        public void Mreza(int x, int y)
        {
            int b = 0;
            for (int i = 0; i < x; i++)
            {
                for (int j = 0; j < y; j++)
                {
                    TextBox tb = new TextBox();
                    b++;
                    tb.ID = "t" + i + j;
                    Panel1.Controls.Add(tb);
                    tb.Height = Unit.Pixel(20);
                    tb.Width = Unit.Pixel(20);
                }
                Panel1.Controls.Add(new LiteralControl("<br/>"));
            }
        }
        
        protected void Button1_Click(object sender, EventArgs e)
        {
            ViewState["xx"] = TextBox1.Text;
            ViewState["yy"] = TextBox1.Text;
            Mreza(int.Parse(TextBox1.Text), int.Parse(TextBox2.Text));
        }

        protected void Button2_Click(object sender, EventArgs e)
        {
            int s = 0;
            TextBox tb=null;

            foreach (Control c in Panel1.Controls)
            {
                if (c is TextBox)
                {
                    tb = c as TextBox;
                    if( tb.Text != "" )
                        s += int.Parse(tb.Text);
                }
            }
            Response.Write(s.ToString());
        }
    }
}


[Ovu poruku je menjao rako88 dana 05.05.2011. u 15:42 GMT+1]
[ rocco337 @ 30.05.2011. 09:41 ] @
Code:
Mreza(int.Parse(TextBox1.Text),int.Parse(TextBox2.Text))


tu bi ti kod mogao pukniti ako ne dodju int vrijednosti.

pročitaj malo na temu "ASP.NET page lifecycle" pa ce ti biti jasnije neke stvari :)

jedno riješenje koje bi moglo raditi jest da napraviš kreiranje kontrola bilo gdje u kodu i nakon toga pozoveš postback. Stranica se nanovo renderira i onda imaš mogućnost dohvaćanja vrijednosti.