Autor Wątek: .NET AJAX UpdatePanel i w nim dynamicznie tworzone kontrolki jako triggery...  (Przeczytany 1877 razy)

Offline Alanu

  • Użytkownik

# Lipiec 21, 2009, 14:38:33
Witam

Kiedys za niepamiętnych czasów korzystałem z 'Warsztatu', dlatego fajnie sie tu wraca po kilkuletniej (owocnej) przerwie...
Myslałem ze dam rade rozwiazac wszystkie problemy sam, ale sie przeliczyłem. Dlatego tu jestem

Otóż mam problem z ImageButtonami (i ogolnie buttonami), które Tworze w  (tu hierarchia):

UpdatePanel / Panel / Table / Rows / Cells, (w kazdym row, jest jedna cell'a a w niej dynamicznie stworzony przycisk),
chciałbym by byl on triggerem dla UpdatePanela (który posrednio jest rodzicem tych przycisków). Niby proste, ale rejestracja przycisków
w ScriptManagerze nie daje rezultatu, a dodanie ich jako triggery dla UpdatePanelu również,...

Tak więc problem,,, jak zmusić te przyciski do postbacku na updatePanelu ?

Problem jest w tym, ze powinienem je rejestrować w evencie strony Page_Init, (lub Page_Load), ale one są tworzone przecież dynamicznie, wiec w Page_Init jeszcze nie istnieją,,, Tworzone są po kliknięciu na Przycisku-triggerze, poza update panelem (stworzonym na formatce),,,


public partial class editors_image_loader : System.Web.UI.Page
{
    int index = 0;

    protected void Page_Load(object sender, EventArgs e)
    {
        //((ArrayList)Session["eventsTiming"]).Add(DateTime.Now.ToString() + ":" +DateTime.Now.Millisecond.ToString() + " [ Page Load ]");
       

        if (!Page.IsPostBack)
        {
            if (Session["index_value"] == null)
            {
                Session["index_value"] = index;
            }
            Redraw();
            FileUpload1.Attributes.Add("onChange", "alert('text Changed ! ');");
        }

        if (Page.IsPostBack)
        {
        }

        //((ArrayList)Session["eventsTiming"]).Reverse();
        GridView1.DataSource = (ArrayList)Session["eventsTiming"];
        GridView1.DataBind();
    }

Button gimgbtn = new Button();

    protected void Page_Init(object sender, EventArgs e)
    {
        ((ArrayList)Session["eventsTiming"]).Add("----------------------------------Page Init---------------------------------");
        ((ArrayList)Session["eventsTiming"]).Add(DateTime.Now.ToString() + ":" + DateTime.Now.Millisecond.ToString() + " [ Page Init ]");

       
        gimgbtn.ID = "imgbtncas";
        //imgbtn.ImageUrl = "~/images/public/buttons/plus_active.bmp";
        gimgbtn.Click +=new EventHandler(MinusClicked);
        //ScriptManager1.RegisterAsyncPostBackControl(imgbtn);

        AsyncPostBackTrigger tri = new AsyncPostBackTrigger();
        tri.ControlID = gimgbtn.ID;
        tri.EventName = "Click";
        //UpdatePanel1.Triggers.Add(tri);


        //TableRow ro = new TableRow();
        //TableCell ce = new TableCell();

        //ce.Controls.Add(imgbtn);
        //ro.Cells.Add(ce);
        //ro.BackColor = System.Drawing.Color.Crimson;

        //.Rows.Add(ro);

        //mainPanel.Controls.Add(gimgbtn); //TO DZIALA !!!!!!!!!!!!!!!!!!!!!!!!!!!
    }

    protected void Page_Unload(object sender, EventArgs e)
    {
        ((ArrayList)Session["eventsTiming"]).Add("------------Page Unload-----------");
    }

    void Redraw()
    {
        bool spoot1 = true;
        bool spoot2 = true;

        Table tab = new Table();

        for (int x = (int)Session["index_value"]; x > 0; x--)
        {
            TableRow row = new TableRow();
            TableCell c1 = new TableCell(); c1.Width = new Unit("100px");
            TableCell c2 = new TableCell(); c2.Width = new Unit("600px");
            TableCell c3 = new TableCell(); c3.Width = new Unit("70px");

            FileUpload fupc = new FileUpload();
            Label lab = new Label();
            [b]ImageButton imgbtn = new ImageButton();[/b]
            Button btn = new Button();
            btn.Text = x.ToString() + "btndelete";
            btn.Click += new EventHandler(MinusClicked);

            row.Height = new Unit("60px");

           
            if (x % 3 == 1)
            {
                if (spoot1)
                {
                    row.BackColor = System.Drawing.Color.GhostWhite;
                    spoot1 = !spoot1;
                }
                else
                {
                    row.BackColor = System.Drawing.Color.WhiteSmoke;
                    spoot1 = !spoot1;
                }
            }
           
            if (x % 3 == 2)
            {
                if (spoot2)
                {
                    row.BackColor = System.Drawing.Color.WhiteSmoke;
                    spoot2 = !spoot2;
                }
                else
                {
                    row.BackColor = System.Drawing.Color.GhostWhite;
                    spoot2 = !spoot2;
                }
            }

            lab.Text = "File " + x.ToString() + " ";
            lab.ForeColor = System.Drawing.Color.PowderBlue;
            c1.Controls.Add(lab);

            fupc.Width = new Unit("500px");
            fupc.ID = "fup_ctl00" + x.ToString();
            c2.Controls.Add(fupc);

            imgbtn.ID = "imgbtn" + x.ToString();
            imgbtn.ImageUrl = "~/images/public/buttons/plus_active.bmp";
            imgbtn.Click +=new ImageClickEventHandler(MinusClicked);
            ScriptManager1.RegisterAsyncPostBackControl(imgbtn);



            c3.Controls.Add(imgbtn);
            c3.Controls.Add(btn);

           

            row.Cells.Add(c1); row.Cells.Add(c2);row.Cells.Add(c3);
            tab.Rows.Add(row);
        }

        mainPanel.Controls.Add(tab);
        //((ArrayList)Session["eventsTiming"]).Add(DateTime.Now.ToString() + ":" +DateTime.Now.Millisecond.ToString() + " [ Redraw() ]");
    }


    protected void PlusClicked(object sender, EventArgs e)
    {
        //((ArrayList)Session["eventsTiming"]).Add(DateTime.Now.ToString() + ":" + DateTime.Now.Millisecond.ToString() + " [ Clicked ]");
        Session["index_value"] = (int)Session["index_value"] + 1;
        Redraw();
        //UpdatePanel1.Update();
    }

    protected void MinusClicked(object sender, EventArgs e)
    {
        Session["index_value"] = (int)Session["index_value"] - 1;
        Redraw();
        //UpdatePanel2.Update();
    }

   
    protected void DeleteSessionVariables(object sender, EventArgs e)
    {
        Session["index_value"] = 0;
        //Redraw();
    }




Może ma ktos jakies rozwiązanie ? Z góry dziekuje za pomoc, a teraz sie zanurzam w kod....





Pozdrawiam wszystkich z Kodersdorf:)
« Ostatnia zmiana: Lipiec 22, 2009, 10:45:41 wysłana przez Alanu »

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Alanu

  • Użytkownik

# Lipiec 22, 2009, 10:46:29
W sumie to wczoraj o 3 w nocy znalazlem sposob, ale i tak nikogo to tu nie interesuje, czy wy wszyscy piszecie strony w PHP ?

Offline Fiołek

  • Użytkownik
    • Blog

# Lipiec 22, 2009, 12:01:58
W sumie to wczoraj o 3 w nocy znalazlem sposob, ale i tak nikogo to tu nie interesuje, czy wy wszyscy piszecie strony w PHP ?
Mnie interesuję. Sam piszę strony w ASP.NET(np. moja x2), ale używam ASP.NET MVC i od ASP.NET AJAX trzymam się z daleka(może czas poznać i to, ale aktualnie nie chce mi się).

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Lipiec 22, 2009, 17:12:44
W sumie to wczoraj o 3 w nocy znalazlem sposob, ale i tak nikogo to tu nie interesuje, czy wy wszyscy piszecie strony w PHP ?
W wiekszości piszemy gry, więc webdeveloperka niezależnie od języka siłą rzeczy ma prawo nas mniej interesować (no, chyba że ktoś pisze grę www). ;)

Offline Alanu

  • Użytkownik

# Lipiec 22, 2009, 18:00:14
.... ja uważam, że okna przeglądarek internetowych są idealnymi oknami do wyswietlania gier...  (no moze nie wszystkich)
ale w tym tkwi potencjał...

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Lipiec 22, 2009, 19:10:18
.... ja uważam, że okna przeglądarek internetowych są idealnymi oknami do wyswietlania gier...  (no moze nie wszystkich)
ale w tym tkwi potencjał...
Powiedzmy, że póki co Ciężko utworzyć w nich kontekst Direct3D. ;)