problem z b.Click += new System.EventHandler(this.ShowResults);

0

Hej mam problem nie wykonuje mi się funkcja this.ShowResults. Tworzy mi się linkbutton ale bez odwołania , tak jakby nie było tej linijki b.Click += new System.EventHandler(this.ShowResults);

...
                 StringBuilder builder = new StringBuilder();
                 Literal literal = new Literal();

  
                LinkButton b = new LinkButton();
                b.ID = "B" + row_nr.ToString();
                b.Click += new System.EventHandler(this.ShowResults);
              
                b.Text = "Zatwierdz";
                b.ForeColor = System.Drawing.Color.FromArgb(255, 102, 0);
                
            
                StringWriter sww = new StringWriter();

                b.RenderControl(new HtmlTextWriter(sww));

                string htmll = sww.ToString();
            
                builder.Append(htmll);

                literal.Text = builder.ToString();
          
                Literal1.Text = literal.Text;
...


 protected void ShowResults(object sender, EventArgs e)
    {
        // Tworzy się element ale po jego naciśnięciu nigdy funkcja się nie wykonuje
       // w kodzie html ktory się generuje nie ma odwołania
    }
     
                  
0

Naprawdę tego kodu jest za mało, wklejaj całe metody, a nie tylko linijki.
Gdzie niby jest to ShowResultsi co to w ogóle jest?
W jakiej metodzie wykonujesz: b.Click += new System.EventHandler(this.ShowResults);?

0

Wkleiłam tylko fragment najistotniejszy ponieważ mam funkcję dosyć rozbudowaną. Dodatkowo dodam że wykorzystuję tutaj jquery -according do prezentowania danych. Wykorzystuje również kilka plików styli oraz javascript wewnętrznych firmy. Ale jak wyłaczyłam style i according problem nadal występował.

Taki się generuje kod html:

<a id="Bd0">Zatwierdz</a>
0

W jakiej funkcji masz ten swój kod renderujący? Co w ogóle próbujesz osiągnąć, bo z tego spaghetti nic nie wynika?

0

a przypadkiem Clickw tym wypadku nie jest Client side ?

0

"W jakiej funkcji masz ten swój kod renderujący? Co w ogóle próbujesz osiągnąć, bo z tego spaghetti nic nie wynika? "

Chodz mi o to że nigdy metoda ShowResults nigdy się nie odpala, nie ważne co w niej jest bo i tak nigdy się nie wykona i nie wiem dlaczego bo definiuje : b.Click += new System.EventHandler(this.ShowResults)
Stosowałam już nie raz tą konstrukcję przy tworzeniu przycisków w tablicy b.Click += new System.EventHandler(this.ShowResults) i działało a teraz nie działa . Zastanawiam się czy to nie z powodu że to jest wewnątrz Literal, a jak tak to jak go obejść.

"a przypadkiem Clickw tym wypadku nie jest Client side ? " - proszę jaśniej

0

Ale co Ty w ogóle chcesz osiągnąć? Utworzyć LinkButton z poziomu kodu i przypisać mu pod Click wykonanie jakiejś metody?

0

Tak. Tworze Linkbutton z poziomu kodu i chce przypisać funkcje obslugującą ten przycisk po jego naciśnięciu.

0

Tak chce przycisk z pozimu kodu stworzyć.

Problem tkwi w :
.RenderControl(new HtmlTextWriter(swww));

bo jak zamiast tego podpiałam do tablicy to przycisk działał.
Pewnie musi być jakaś inna funkcja.

0

To jest ASP.NET rozumiem? Dlaczego "ręcznie" renderujesz tą kontrolkę?

0

Tak to Asp.net Pobieram z bazy dane w zależność od danych tworzę odpowiedni according (jquery) po jego kliknięciu prezentuję dane. Następnie chcę dodać przycisk by zatwierdzać dane. Dlatego tworzę przycisk od strony kodu ale nie wiem jak go wpiąć. Gdy podobnie generowałam przyciski tylko do tablicy to było ok ale tu musze renderować i szlak wszystko trafia. Jest mądrzejszy sposób??

0

Hmm prawdopodobnie musisz dodać tą kontrolkę do jakiegoś kontenera. Samo generowanie html raczej nie wystarczy. ASP.NET musi mieć dostęp do wszystkich kontrolek na stronie. Pytanie jeszcze gdzie jest ten kod. Na jakim etapie cyklu życia strony?

0

Musze trochę poczytać i inaczej do tego problemu podejść. Pewnym pośrednim rozwiązaniem jest :

<div id="met">
....
</div>
                
                LinkButton bb = new LinkButton();
                bb.ID = "B" + row_nr.ToString();
                bb.Click += new System.EventHandler(this.Click_Zatwierdz);
                bb.Text = "Zatwierdz";
                bb.CausesValidation = true;


               Page.Controls.Add(bb);
               met.Controls.Add(bb); 

Ale to mi nie załatwi do końca moich problemow bo ja dodatkowo w środku w tym divie buduje html o strony c#. A powyższym kodzie mogę albo na dole dodać kontrolkę . A ja potrzebuję ją w środku.

0
betmira napisał(a):

Musze trochę poczytać i inaczej do tego problemu podejść. Pewnym pośrednim rozwiązaniem jest :

<div id="met">
....
</div>

Tutaj musi być

<div id="met" runat="server"></div>

Natomiast to:

                
               Page.Controls.Add(bb);

jest zbędne bo met będzie już wśród kontrolek na stronie.

PS. Nadal nie podałaś gdzie znajduje się generowanie tych elementów. W jakim zdarzeniu pisząc w uproszczeniu.

0

Tworze to przy ładowaniu strony w Page_Load.

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;

using System.Data;
using System.IO;





public partial class ObslWnioskow : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

        LWnioski wnioski = new LWnioski();
        // id_prze - opcjonalne gdy chcemy dla konkretnego użytkownika np do przeglądu 
        // status 0 - do obsłurzenia 1 - obsłużone 


        wnioski.ReadWnioski(0, false);
       

        ZaladujTab(wnioski);

    }




    public void ZaladujTab(LWnioski wniosek)
    {


      

        if (wniosek != null)
        {
            StringBuilder builder = new StringBuilder();
            Literal literal = new Literal();
            for (int row_nr = 0; (row_nr < wniosek.wnioski.Count); row_nr++)
            // for (int row_nr = 0; (row_nr < sampleA.arr.Count) && (row_nr < 20); row_nr++)
            {
                //UprawUzyt s = (UprawUzyt)uprawnienia.lupraw[row_nr];

                Wniosek ww = (Wniosek)wniosek.wnioski[row_nr];

                

               // TableRow tRow = new TableRow();

              //  TableCell tCell = new TableCell();
                //HtmlString  gg= 

                builder.Append("<h3>Wniosek nr" + ww.nr + "<br />Wnioskujący: " + ww.prze_eg + "<br />Osoba do której tworzone uprawnienie: " + ww.uzytk_eg + "</h3>");
                
                builder.Append("<div id="+ "zz"+">Nadanie uprawnień do programów");
                LinkButton bb = new LinkButton();
                
                

                bb.ID = "B" + row_nr.ToString();
                bb.Click += new System.EventHandler(this.Click_Zatwierdz);
                bb.Text = "Zatwierdz";
                bb.CausesValidation = true;

    //            bb.OnClientClick += new System.EventHandler(this.Click_Zatwierdz);
                //TableCell tCellw = new TableCell();
                //TableRow tRoww = new TableRow();
                //tCellw.Controls.Add(bb);
                //tRoww.Cells.Add(tCellw);
 //               Table1.Rows.Add(tRoww);

  //              builder.Append(tRoww);

                

  //              StringWriter swww = new StringWriter();
  //              tRoww.RenderControl(new HtmlTextWriter(swww));

               // tRoww.SetRenderMethodDelegate
                
                //tRoww.RenderingCompatibility(-1);
//                bb.RenderControl(new HtmlTextWriter(swww));
   //             string htm = swww.ToString();
               
          //      builder.Append(htm);




                //Page.Controls.Add(bb);
                //accordion.Controls.Add(bb);
             

                Table tt = new Table();
                tt.ID=ww.nr.ToString();

                List<string> titles = new List<string>();
               
                titles.Add("aplikacja ");
                titles.Add("uprawnienie ");
                titles.Add("posiadane uprawnienia ");
                titles.Add("wnioskowane uprawnienia ");
               

                TableRow tRow = new TableRow();
                tRow.Font.Bold = true;


                 for (int i = 0; i < titles.Count; i++)
        {
            TableCell tCell = new TableCell();
            tCell.Text = titles[i];
            tRow.Cells.Add(tCell);
            //Page.Controls.Add(bb);
            //tCell.Controls.Add(bb);
             

        }
                 StringWriter sw = new StringWriter();
                 tRow.CssClass = "title";

                 tt.Rows.Add(tRow);
                
                 for (int nr_poz = 0; nr_poz < ww.pozycje.Count; nr_poz++)
                 { 
                     
                     Wniosek_poz wp =(Wniosek_poz)ww.pozycje[nr_poz];

                     TableRow tRows = new TableRow();

                     TableCell tCell = new TableCell();

                     tCell.Text = wp.app_opis;
                     tRows.Cells.Add(tCell);

                     tCell = new TableCell();
                     tCell.Text = wp.upr_opis;
                     tRows.Cells.Add(tCell);

                     tCell = new TableCell();
                     tCell.Text = wp.byl;
                     tRows.Cells.Add(tCell);

                     tCell = new TableCell();
                     tCell.Text = wp.nowy;
                     tRows.Cells.Add(tCell);

                     tt.Rows.Add(tRows);
                    
                 }



                
            //    tt.RenderControl(new HtmlTextWriter(sw));

            //     string html = sw.ToString();
            //;
            //     builder.Append(html);
                builder.Append("</div>");


                Page.Controls.Add(tt);
                met.Controls.Add(tt);
            }
            literal.Text = builder.ToString();
          
            Literal1.Text = literal.Text;
            
        }
    }

    protected void Click_Zatwierdz(object sender, EventArgs e)
    {
        // zatwierdz procedura do napisania

        if (sender is LinkButton)
        {

            Session["SAMPLEAA"] = "";
            Session["probki"] = "";

            //odczytanie nr wiersza, z którego nastąpiło wywołanie
            string snr = ((LinkButton)sender).ID.Remove(0, 1);
        }
    }
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ObslWnioskow.aspx.cs" Inherits="ObslWnioskow" MasterPageFile="~/MasterPage.master" %>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">

        <div id="pageContent">
        <div class="governance">
            <div id="contentArea" class="investorRelations">
           
                <h1>
                   Przegląd wniosków</h1>
            </div>
            <div class="contents">

              
            <script>
                $(function () {
                    $("#accordion").accordion({        
    active:-1,
     collapsible: true
});

                });

    </script>
                <style>
                    .governance
                    {
                    margin-left:250px;
                    }

                    .governance div#contentArea.investorRelations {
                        padding: 30px 0 0 75px;                     
                     }

                    select.styled1 {
                    filter: alpha(opacity=0);
                    
                    }
                  

                </style>

               <div id="met" runat="server">
                <div id="accordion" >
                    <asp:Literal ID="Literal1" runat="server">
                    
                     
                    
                    </asp:Literal>

                  

    
                </div>
                </div>
                </div>
                </div></div>
</asp:Content>
0

Dziękuję za pomoc :-). Przerobie to i wykorzystam repeater oraz kolekcje . Łatwiej będzie mi na tym zapanować. W asp.net jestem dopiero 3 miesiące i nie znam jeszcze jego wielu możliwości.

http://michalurbanski.wordpress.com/2010/11/20/asp-net-repeater-cz-1/

1 użytkowników online, w tym zalogowanych: 0, gości: 1