Avatar billede _basil Nybegynder
05. juli 2005 - 09:51 Der er 13 kommentarer og
1 løsning

Indsætte en knap i en control.

Hej eksperter.

Jeg har en side der loader en control der ser sådan ud:
<asp:DataGrid id="dgYear" Runat="server" AllowSorting="True" ShowFooter="True" Cellpadding="0" GridLines="None" Width="100%" AutoGenerateColumns="False">
    <AlternatingItemStyle CssClass="Datagrid2"></AlternatingItemStyle>
    <ItemStyle CssClass="Datagrid1"></ItemStyle>
    <HeaderStyle CssClass="Overskrift3"></HeaderStyle>
    <FooterStyle CssClass="Overskrift3"></FooterStyle>
</asp:DataGrid>
<asp:Label ID="lblTest" Runat="server" Visible="False" Font-Size="8pt"></asp:Label>
<div class="ExcelKnap" align=right><asp:Button ID="btnToExcel" Runat="server" Text="Til Excel"></asp:Button></div>

Som i kan se har jeg forsøgte at indsætte en knap i bunden og forsøger at fange det event der sker når jeg trykker på den. Men der sker ingenting? Så vidt jeg kan se i codebehind filen har jeg skrevet eventet rigtigt.

Men er det fordi knappen ikke står i en form? og kan man overhovedet gøre ovenstående
Avatar billede snepnet Nybegynder
05. juli 2005 - 10:41 #1
hej basil :o)

knapper skal være i en form (runat="server"), og man plejer at få en fejl hvis det ikke er tilfældet.

hvordan har du oprettet din eventhandler?

du kan for sjov lige prøve sådan her:
<asp:Button ID="btnToExcel" Runat="server" Text="Til Excel" OnClick="ButtonClick></asp:Button>

og så i koden:
protected void ButtonClick(object sender, EventArgs e)
{
  Button btn = sender as Button;
  if(btn != null)
  {
    btn.Text="KLIK";
  }
}

mvh
Avatar billede _basil Nybegynder
05. juli 2005 - 12:17 #2
Mit event er defineret således (Jeg bruger c#) :)

private void btnToExcel_Click(object sender, System.EventArgs e)
{
          //export to excel
}

og under initialize components:

this.btnToExcel.Click += new System.EventHandler(this.btnToExcel_Click);

Har gjort ovenstående masser af gange før, men aldrig på en control
Avatar billede snepnet Nybegynder
05. juli 2005 - 12:26 #3
mmm... hvad mener du med at du aldrig har gjort det på en kontrol? - er det en UserControl du har lavet eller? (ikke at det skulle gøre nogen forskel).

bortset fra det - så gør koden ikke noget... hvordan konstaterer du at du ikke får kaldt handleren?

mvh
Avatar billede snepnet Nybegynder
05. juli 2005 - 12:29 #4
umiddelbart ser der ikke ud til at være noget i vejen med din kode.... sætter du kontrollen ind i et event fra din form, eller er den statisk angivet i html'en?
mvh
Avatar billede _basil Nybegynder
05. juli 2005 - 12:34 #5
Ja undskylde.. det er selvfølgelig en web user control. Måske jeg skal uddybe lidt:

Jeg har en side "rapport.aspx" som loader en usercontrol "aarsoversigt.ascx." Usercontrollen opbygger et dataset som jeg skal have exporteret til Excel.

Har derfor lavet en knap på aarsoversigt.ascx som det kan ses på koden jeg har vedlagt,  men der sker ikke noget når jeg klikker på knappen. Måden jeg kan se der ikke sker noget, er fordi jeg har sat et breakpoint på :
private void btnToExcel_Click(object sender, System.EventArgs e)

Men funktionen bliver aldrig kaldt.

Min tanke var, at der jo ikke er nogen "form" tag på aarsoversigt.ascx fordi den bliver loadet fra aspx siden, og det måske kunne have noget med det at gøre
Avatar billede snepnet Nybegynder
05. juli 2005 - 12:44 #6
nu kan der være flere årsager til at du ikke rammer et breakpoint - kan du ikke lige modificere din handler til :

private void btnToExcel_Click(object sender, System.EventArgs e)
{
  this.Page.Response.Write("blah");
}

hvordan (og i hvilken metode - hvis nogen) loader du aarsoversigt.ascx ?

mvh
Avatar billede _basil Nybegynder
05. juli 2005 - 12:47 #7
Jeg loader usercontrollen således:

private void bindAarsOversigt(string userEmail)
        {
            ctrlAarsOversigt ctrl = (ctrlAarsOversigt)LoadControl("Controls/ctrlAarsOversigt.ascx");
            ctrl.year = Convert.ToInt32(ddYear.SelectedItem.Value);
            ctrl.user = userEmail;
            placeYear.Controls.Add(ctrl);
        }
Det skal måske lige siges at usercontrollen har virket længe, det er bare en tilføjelse af funktionalitet at jeg skal kunne eksportere til excel
Avatar billede snepnet Nybegynder
05. juli 2005 - 12:50 #8
kan vise den kode der kalder bindAarsOversigt?
- og fik du sat noget kode ind i handleren ?

(som udgangspunkt vil du ikke kunne stoppe på selve funktionsdeklarationen, men vs burde selv flytte dit breakpoint til den afsluttende } - eller til første statement, hvis der er et sådant).

mvh
Avatar billede snepnet Nybegynder
05. juli 2005 - 12:52 #9
(det har ikke noget at gøre med at du ikke har et form-tag i din usercontrol... det er helt som det skal være, og du vil få en fejl hvis du sætter en serverside form ind i user-kontrollen)
mvh
Avatar billede _basil Nybegynder
05. juli 2005 - 12:57 #10
Jeg prøvede at indsætte this.Page.Response.Write("blah") i handleren, men det blev ikke skrevet på siden.

Jeg har prøvet det med at indsætte en serverside form i controllen og den fejlede ganske rigtigt. Prøvede så at oprette en knap på den aspx side der loader controllen og så kan jeg godt få eventet til reagere. Men på aspx siden har jeg ikke det dataset til rådighed jeg skal bruge.

Her er koden der kalder bindAarsOversigt:
private void Page_Load(object sender, System.EventArgs e)
        {
            // Put user code to initialize the page here
            if(!Page.IsPostBack)
            {
                bindDDMonths();
                bindDdYears();
                bindDdPerson();
                if(uc.getTimaxNiveau() == 4)
                {
                    ddPerson.Visible = true;
                }
                else
                {
                    ddPerson.Visible = false;
                }
                bindMaaneder(uc.GetCurrentUserEmail());
                bindAarsOversigt(uc.GetCurrentUserEmail());
               
            }
        }
Avatar billede snepnet Nybegynder
05. juli 2005 - 13:01 #11
du sætter jo så kun kontrollen ind, når brugeren ser siden første gang - så den indsættes ikke når du trykker på knappen, og derfor vil du heller ikke få kaldt din handler.
mvh
Avatar billede snepnet Nybegynder
05. juli 2005 - 13:02 #12
du skal indsætte den hver gang, hvis du vil have det til at ske.
mvh
Avatar billede _basil Nybegynder
05. juli 2005 - 13:27 #13
AHH!! Mange tak.. det var det der var problemet.. Har sat  bindMaaneder(uc.GetCurrentUserEmail());
bindAarsOversigt(uc.GetCurrentUserEmail());
udenfor if løkken der tjekker for postback.
Smid lige et svar og du får dine velfortjente points
Avatar billede snepnet Nybegynder
05. juli 2005 - 13:45 #14
får du 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