Avatar billede bongo20 Nybegynder
30. december 2004 - 12:09 Der er 5 kommentarer og
1 løsning

new buttons med eventhandler

Hej!

På min side laver jeg en tabel dynamisk hvor jeg i hver celle opretter en knap og sætter ind:

while ( dataReader.Read() )
{
    .......

    btn = new Button();
    btn.Text = "Save";
    btn.Click += new System.EventHandler(SaveText);
    cell.Controls.Add(btn);

    .......
           
}

mit problem er at jeg i min metode
SaveText(Object sender, EventArgs e)
ikke ved hvodan jeg finder ud af hvilken knap der er trykket på, idet der jo kan være 20 ens knapper på siden.

Nogen der ved hvad jeg mener og kan hjælpe?

:o)
Avatar billede snepnet Nybegynder
30. december 2004 - 13:41 #1
Hej bongo :o)

Du kan give dem et commandname og/eller commandargument - f.eks. et id fra din reader sådan her :

while ( dataReader.Read() )
{
    .......

    btn = new Button();
    btn.Text = "Save";
    btn.CommandName = "Save";
    btn.CommandArgument = dataReader["someId"].ToString();
    btn.Click += new System.EventHandler(SaveText);
    cell.Controls.Add(btn);

    .......
           
}

Så kan du spørge på det i din handler :

// id kan du så få sådan her :
int someId = (int)((Button)sender).CommandName;

Var det noget i den stil du var ude efter ?

mvh
Avatar billede bongo20 Nybegynder
03. januar 2005 - 08:26 #2
Hej snepnet, med lidt omskrivninger tror jeg, jeg fik det til at virke.

Jeg gjorde sådan her ellers fik jeg fejl:

btn.CommandName = dReader["Id"].ToString();
btn.CommandArgument = dReader["Id"].ToString();

int someId = Convert.ToInt32(((Button)sender).CommandName);

men nu virker det :o)
smider du et svar?
Avatar billede bongo20 Nybegynder
03. januar 2005 - 08:38 #3
ok, jeg har fået et tillægsproblem !!

Når jeg trykker på knappen vil jeg gerne have fat i teksten fra en tekstbox tilhørende samme række i tabellen. Her har jeg samme problem, med at få fat i det rigtige textfelt, idet disse jo også generes dynamisk...

Har du et forslag til det?
Avatar billede snepnet Nybegynder
03. januar 2005 - 12:46 #4
hmm.... du kan eventuelt sætte id'et på den tekstboks du vil have fat i som commandargument/name, og så hente den med FindControl(...);

men ellers tror jeg næsten det vil være lettere for dig simpelthen at angive id'et på teksboksen selv - så kan du hente den med FindControl(<id>);

f.eks.

int rowId = 0;
while ( dataReader.Read() )
{
    rowId = (int)dReader["Id"];
    .......

    btn = new Button();
    btn.Text = "Save";
    btn.CommandArgument = rowId.ToString();
    btn.Click += new System.EventHandler(SaveText);
    cell.Controls.Add(btn);
    TextBox tb = new TextBox();
    TextBox.ID = "TEXT_"+ rowId.ToString();
    cell.Controls.Add(btn);
   
    .......
           
}

og så i din handler :

Button btn = (Button)sender;
string id = btn.CommandArgument;
TextBox tb = (TextBox)btn.NamingContainer.FindControl("TEXT_"+id);
string textBoxText = tb.Text;

Jeg har ikke prøvet det, men sådan grundlæggende skulle du kunne gøre noget i den stil... du kan lige sige til hvis du får noget bøvl med det.

mvh
Avatar billede bongo20 Nybegynder
03. januar 2005 - 14:58 #5
Virker glimrende der snepnet,.. mange tak :o)
Avatar billede snepnet Nybegynder
03. januar 2005 - 15:16 #6
du er meget velkommen bongo :o)
vi skrives ved.
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