[C#/ASP.NET] Dynamische LinkButton Postback

Pagina: 1
Acties:

  • DinX
  • Registratie: Februari 2002
  • Laatst online: 08:58

DinX

Motormuis

Topicstarter
Even een korte situatie-schets:

Ik ben bezig aan een webform om in een tabel ingevulde en niet ingevulde taken weer te geven voor een dag.
Ik heb eerst geprobeerd rechtstreeks rijen en cellen aan te maken in de tabel, maar wanneer ik dan van dag wisselde (en die dingen opnieuw moeten worden opgebouwd) bleven soms oude waarde's staan. Rows.clear() en dergelijken hielpen niet.

Nu heb ik daarvoor de oplossing gevonden.

Ik maak een ArrayList aan die evenveel rijen bevat als de table (einduur - beginuur, 1 rij per kwartier).
Aan die ArrayList voeg ik dan rijen toe.
Deze rijen bevatten cellen, die, bij de eerste cell van een periode, ook een LinkButton krijgen met daaronder een Label met de omschrijving van de taak.

Dit alles gaat goed. De linkbuttons en cellen worden automatisch aangemaakt en toegevoegd aan een row, die dan weer wordt toegevoegd aan de ArrayList. De rows hieruit worden daarna weer toegevoegd aan de table.

Het probleem nu:
Wanneer ik op de linkbutton van een bepaalde taak klik, dan zou er een iframe zichtbaar moeten worden met daar details in. Dit werkt (heb het getest met een normale button).

Ik heb al geprobeerd om hier een method aan te hangen met een EvenHandler, en ook met een CommandEventHandler (waarbij ik dan ook de commandname, argument en command instel).
Wanneer ik nu echter op de linkbutton klik, dan krijg ik een postback (duh), maar ik kom nooit terecht in de method waarin ik zou moeten terechtkomen.

Ik heb al een topic bekeken op GoT waar iemand ongeveer hetzelfde probleem had, maar heb wat problemen daarmee.
Het probleem zou veroorzaakt worden doordat de ViewState wijzigt, waardoor de events niet meer aan de linkbuttons hangen :?
Ik heb dus, zoals ze daar zeiden, in de page init override proberen de linkbuttons terug aan het event method te hangen, maar daar krijig ik dus een error van een not valid cast.

Moet ik inderdaad zoals in dat topic gezegd deze linkbuttons terug aan hun even hangen, of is er iets anders fout ?

Stukje code:

C#:
1
2
3
4
5
6
7
8
LinkButton lb = new LinkButton();
lb.Text = "Taak: " + row1["Nummer"].ToString();
lb.Width = 200;
lb.ID = "CF:" + row1["Nummer"].ToString();
lb.Font.Size = 7;
lb.CommandName = "CodfusTask";
lb.CommandArgument = row1["nummer"].ToString();
lb.Command += new CommandEventHandler(TaskButtonClick);

Hier wordt dus de linkbutton aangemaakt. Daarna voeg ik hem toe aan een cell, die ik toevoeg aan een row, die ik dan weer in de ArrayList stop.

C#:
1
2
3
4
5
6
7
8
9
10
void TaskButtonClick(object sender, CommandEventArgs e)
{
    detailView.Visible = true;
    string task;
    task = e.CommandArgument.ToString();
    Response.Write(task);
    /*Session["taskID"] = "529737";
    Session["view"] = true;
    detailView.Attributes["Src"] = "detail.aspx";*/
}

De method die zou moeten getriggerd worden (nu met een beetje testcode)

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private void overzicht_Init(object sender, System.EventArgs e)
{
    for(int i = 0; i < cfAL.Count; i++)
    {
        for(int j = 0; j < ((TableRow)(cfAL[i])).Cells.Count; j++)
        {
            if(((TableRow)(cfAL[i])).Cells[j].Controls.Count > 1)
            {
              ((LinkButton)(((TableRow)(cfAL[i])).Cells[j].Controls[1]))
.CommandName = "CodfusTask";
              ((LinkButton)(((TableRow)(cfAL[i])).Cells[j].Controls[1]))
.CommandArgument = "test";
              ((LinkButton)(((TableRow)(cfAL[i])).Cells[j].Controls[1])).Command
 += new CommandEventHandler(TaskButtonClick);
            }
        }
    }
}

Zo probeerde ik dus de linkbuttons terug aan hun event te hangen, maar dan krijg ik deze fout:
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.InvalidCastException: Specified cast is not valid.
Is dit overriden nu echt de oplossing, en zo ja, waar zit de fout ?
En zo nee, hoe krijg ik dit probleem dan opgelost ?


Screenshotje

edit: ok, de cast fout is eruit (moest control[0] zijn, de linkbutton is de eerste control in zo een cell).
Maar het probleem is nog altijd niet opgelost. Er gebeurt niks bij het klikken op de linkbutton

[ Voor 20% gewijzigd door DinX op 24-05-2004 17:04 ]

Marokko 2015: Route
Sat Tracker: SpotWalla
Blog: Gone for a ride


  • DinX
  • Registratie: Februari 2002
  • Laatst online: 08:58

DinX

Motormuis

Topicstarter
Schopje, ik heb een "oplossing" gevonden.
Misschien dat dit nog een tip is voor in de search.

Ik heb nu in de plaats van een LinkButton een HyperLink object gebruikt?
Daar dan tijdens het aanmaken een request variabele achter gezet (kom niet op de juiste naam, zo wat je achter de ? zet in de url :) )

Die laat ik dan dezelfde page openen, waar in in m'n page_load een functie heb gezet die gaat controleren of er zo een variabele meegegeven is, en of die een waarde heeft.
Als hij een waarde heeft kan hij de nodige detail-form in een iframe laten zien :)

Te denken dat ik anderhalve dag heb liggen prutsen met die LinkButtons en z'n event |:(

Marokko 2015: Route
Sat Tracker: SpotWalla
Blog: Gone for a ride