Avatar billede wired Nybegynder
20. marts 2004 - 10:35 Der er 10 kommentarer og
1 løsning

Bind en onclick fra en row til code-behind

Jeg vil gerne at man kan klikke på rækken(row) og at det bliver sendt over til serversiden, men at server-siden skal modtage det som var det en link-button.

Jeg har lavet følgende:

  Dim KT As New Table
  Dim KR As New TableRow
  KT.Controls.Add(KR)
 
  ' Skal jeg
  KR.attribute.add("onclick",Page.load)

  ' eller skal jeg
  AddHandler Kr.Onclick, Page.load

  Dim KC1 As New TableCell
  KC1.text = "cell1"
  KR.Controls.Add(KC1)
Avatar billede snepnet Nybegynder
20. marts 2004 - 14:00 #1
Det er ikke helt fint i kanten det du har skrevet, men det kan godt lade sig gøre på en rimelig enkel måde. Du får lige en kodestump om 5 min.
Avatar billede snepnet Nybegynder
20. marts 2004 - 14:10 #2
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 Snippets.EkspertenTries
{
    public class AddOwnClientreference : System.Web.UI.Page
    {
        private void Page_Load(object sender, System.EventArgs e)
        {
            // en tabel
            Table tbl = new Table();
            TableRow tr = new TableRow();
            TableCell tc1 = new TableCell();
            TableCell tc2 = new TableCell();
            TableCell tc3 = new TableCell();
            TableCell tc4 = new TableCell();

            // lidt styles
            tbl.BorderStyle = BorderStyle.Solid;
            tbl.BorderWidth = 1;
            tbl.Width = 450;
                       
            // knappen der benyttes
            LinkButton btn = new LinkButton();
            btn.CommandArgument = "someArgument";
            btn.CommandName = "snydeklik";
            btn.Click += new EventHandler(btn_Click);           
            btn.Visible = false;

            // dummytekster
            tc1.Text = "bla";
            tc2.Text = "bla";
            tc3.Text = "og bla";

            // ind med dummycellerne
            tr.Cells.Add(tc1);
            tr.Cells.Add(tc2);
            tr.Cells.Add(tc3);           
           
            // knappen ind i en usynlig celle
            tc4.Visible = false;
            tc4.Controls.Add(btn);
            tr.Cells.Add(tc4);

            // lidt mouseoverfis...
            tr.Attributes.Add("onmouseover", "this.style.background=\"#c0c0c0\"");
            tr.Attributes.Add("onmouseout", "this.style.background=\"#ffffff\"");
           
            // ind med rækken
            tbl.Rows.Add(tr);

            // tabellen smides ind på siden           
            this.Controls[1].Controls.Add(tbl);
       
            // når sagerne er smidt ind i kontroltræet kan du lave dette lille trick
            tr.Attributes.Add("onclick", this.GetPostBackEventReference(btn, "testargument"));
        }

        // handler for knappen
        private void btn_Click(object sender, EventArgs e)
        {
            // fyrer den for dit TableRow... du kan self bare lave det hele her hvis du hellere vil det
            OnRowClicked((LinkButton)sender, e);
        }

        // handler for rækken
        private void OnRowClicked(LinkButton sender, System.EventArgs e)
        {
            Response.Write("[CommandName : " + sender.CommandName+ "] [Argument : " + sender.CommandArgument + "]");
        }

        override protected void OnInit(EventArgs e)
        {
            InitializeComponent();
            base.OnInit(e);
        }
       
        private void InitializeComponent()
        {   
            this.Load += new System.EventHandler(this.Page_Load);
        }
    }
}
Avatar billede wired Nybegynder
20. marts 2004 - 14:31 #3
Ok... Jeg prøver lige.. Det ser ud til at du har styr på det.

Hvordan får du lige
  btn.Click += new EventHandler(btn_Click);
over til vb.net?
Avatar billede wired Nybegynder
20. marts 2004 - 16:10 #4
Ok
  btn.Click += new EventHandler(btn_Click);
erstattes med
  AddHandler btn.Click, AddressOf btn_Click

og
  this.Controls[1].Controls.Add(tbl);
med
  Controls.Add(KursusTabel)

og
tr.Attributes.Add("onclick", this.GetPostBackEventReference(btn, "testargument"));
med
tr.Attributes.Add("onclick", page.GetPostBackEventReference(btn, "testargument"));


Mennnn
OnRowClicked((LinkButton)sender, e);
og
InitializeComponent();
base.OnInit(e);

Er jeg ikke sikker på at jeg forstår.
Avatar billede wired Nybegynder
20. marts 2004 - 16:19 #5
Den hopper ikke ned i btn_Click

client-siden skriver:
  onclick="__doPostBack('','testargument')"

Så der må være noget galt i:
  tr.Attributes.Add("onclick", Page.GetPostBackEventReference(btn, "testargument"))
Avatar billede wired Nybegynder
20. marts 2004 - 16:20 #6
Jeg har ikke rettet
btn.CommandName = "snydeklik"
hvilket jeg har fornemmelsen af at jeg skal, men til hvad?
Avatar billede snepnet Nybegynder
20. marts 2004 - 17:29 #7
Der er ikke nødvendigvis noget galt i dit kald, men tilsyneldende kendes knappens  clientid ikke på det tidspunkt du laver det (det er derfor du får  onclick="__doPostBack('','testargument')" istedet for  onclick="__doPostBack('<et eller andet clientid>','testargument')".
Det er derfor det er vigtigt at du først refererer til knappen efter den er lagt ind pageobjektets kontroltræ... Ellers er clienid ikke kendt.

Nu ved jeg jo ikke lige hvordan din kode er bygget op, men hvis du vil bruge det clientid der autogereneres kan du benytte min kode direkte (i et c# projekt :), eller forsøge dig med  - alternativt kan du tildele et id selv (btn.ID = "whatever").

OnRowClicked((LinkButton)sender, e) er bare en metode jeg selv så det bliver sådan lidt lookalike :) - jeg kalder den jo også bare fra handleren for knappen med et typecast således at du kan tilgå command-senderen som en LinkButton.

CommandName kan du bruge til at angive hvilket kommando du ønsker eksekveret når der trykkes... du kunne så i handleren måske have en switch på commandname ell. Det er bare en mulighed.

Håber det gav mening... ellers må du lige skrive igen.
Avatar billede wired Nybegynder
20. marts 2004 - 19:07 #8
Fedt.. Det var netop ID der var problemet. Havde givet tc4 id og ikke btn.
Nu skal jeg bare have videreført det til min control men det kræver et nyt spørgsmål.
Mange tak for hjælpen.
Avatar billede wired Nybegynder
20. marts 2004 - 19:10 #9
Da jeg har indlæst det som en control kommer informationerne jo kun til forsiden og ikke videre til controllen.
Avatar billede wired Nybegynder
20. marts 2004 - 19:14 #10
Forøvrigt forstod jeg ikke hvad btn.CommandName="snydeklik" gjorde... Men nu virker det. Endnu engang - mange tak.
Avatar billede snepnet Nybegynder
20. marts 2004 - 19:46 #11
Det er bare en strengvariabel som du så kan samle op senere, hvis du skulle have lyst... det bruges bl.a. i forbindelse med eventbubbling...
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