Avatar billede frostedflake Nybegynder
19. august 2004 - 14:34 Der er 18 kommentarer og
1 løsning

tabel der forsvinder ved postback

Jeg har et problem med en tabel som genereres dynamisk, som forsvinder når jeg trykker på min gem knap for at gemme mine ændringer. enableviewstate er sat til "true" så det ka ik være det. Når siden startes op oprettes tabellen vha. et kald til en function, fra Page_Load. detta kald forekommer dog ikke i Page_Load ved postbacks. Tabellens inhold ændres afhængigt af hvad man vælger på en træmenu(TreeView) som også er på siden. Når man så har fået tabellen til at se ud som man vil, så indfører man noget tekst i nogle tekstbokse i tabellen og trykker på en "gem" knap.
problemet er bare at når jeg så har trykker på "gem" og tager fat i tabellen, så er den fuldstændig tom, ingen Rows at køre igenmnem overhovedet!????.
Avatar billede frostedflake Nybegynder
19. august 2004 - 15:13 #1
Det skal lige siges at sproget det hele er skrevet i er C#, i tilfælde af at det har noget at sige.
Avatar billede repsak Nybegynder
19. august 2004 - 15:31 #2
der er ikke et panel eller noget som er usynligt? Den type fejl skyldes typisk sådan noget 'simpelt' noget ;-)
Avatar billede frostedflake Nybegynder
19. august 2004 - 15:35 #3
Nope der er ingen paneler. siden indeholder Et treeView, en knap og to to tabeller.
Det hele er arrangeret i en alm html-tabel for at holde styr på deres placering. Det er hvad der er.
Avatar billede frostedflake Nybegynder
19. august 2004 - 15:36 #4
TreeView = træmenu....ligesom i stifinder.
Avatar billede snepnet Nybegynder
19. august 2004 - 17:26 #5
Hvis du ikke indsætter tabellen ved postback - vil den heller ikke eksistere.
Hvis du smider kontroller ind på siden dynamisk bliver du nødt til at gøre det hver gang.
Du kan stadig godt nøjes med at udføre eventuel databinding ell. efter det mønster du har beskrevet, men kontrollen skal altid ind.
mvh
Avatar billede snepnet Nybegynder
20. august 2004 - 08:34 #6
Du kan eventuelt smide din kode herud... Det er sikkert ikke mange ændringer der skal til for at du ser data hver gang, men kun databinder når det er nødvendigt.
mvh
Avatar billede frostedflake Nybegynder
20. august 2004 - 10:15 #7
er ik helt klar over hvad du mener ved "indsætter"!!?...hvis du mener at jeg ska generere den igen ved postback vil det så ik overskrive de ændringer jeg har lavet?

Der forekommer ik rigtig databinding i den forstand at jeg bare angiver en source og beder den om at databind....jeg henter noget data ud fra en MS-sql database hvorefter jeg recursivt arrangerer dataene i tabellen afhængig af inholdet af nogle af felterne i tabellen sammen holdt med det man har trykker på i træmenuen. Hvis jeg bare ku angive en source og så skrive tabel.databind så havde jeg valgt at bruge et datagrid istedet, da det ville have været langt nemmere.
Avatar billede snepnet Nybegynder
20. august 2004 - 11:08 #8
Det var fordi du skrev at du genererede den dynamisk, og at du oprettede den i page_load, at jeg gik ud fra at du "indsatte" den programmatisk. Med indsætte mener jeg at du tilføjer kontrollen til kontroltræet.

jeg bliver nødt til at se lidt af din kode, hvis jeg skal svare på de spørgsmål du stiller. gerne din page_load, og den metode der indsætter/generere/opretter/maler/skruer din tabel sammen :o)

databindingsmekanismen i .net er en lidt mere generel mekanisme end jeg forstår det du skriver, og du kan altid bruge det - også med det behov du beskriver.

Men... smid lidt kode - så skal vi nok få det fikset ;o)

mvh
Avatar billede frostedflake Nybegynder
20. august 2004 - 15:23 #9
ok jeg ka lige smide lidt seudo-kode

private void Page_load(......)
{
  if(!(IsPostBack))
  {
      lav en topNode til Treeview;
      bygTreeView(topNode);

      lavFørsteTabel(-1);
//skal have "-1" som variabel da denne metode recursivt bygger et spejlbillede af
//træet i tabellen baseret på det metoden opfatter som værende topnodens "ID"

      lavAndenTabel(-1); 
//skal have "-1" som variabel da denne metode recursivt bygger et spejlbillede af
//træet i tabellen baseret på det metoden opfatter som værende topnodens "ID"

  }
}

når man så trykker på en "node" i TreeView-menuen så kaster den jo en event
som så laver om på begge tabelle afhængigt af hvilket niveau i træet man har trykket på. denne event ser ud som følger.(stadig seudo-kode)

private void TreeView_NodeClick(...args....)
{
    TreeNode anyNode=args.Node;
           
    if(anyNode.Expanded==false)
    {
        anyNode.Expand();
        lavFørsteTabel(anyNode.Value);
        lavAndenTabel(anyNode.Value));
//anyNode.Value er den id som de to tabelskabende metoder opfatter som værende
//topnode.
    }
    else
    {
        anyNode.Collapse();
        lavFørsteTabel(anyNode.Value);
        lavAndenTabel(anyNode.Value));   
    }   
}

På den måde er tabeller en afspejling af det niveu i træet man har trykket på, og alt hvad der ligger under det niveau.

så har jeg selvfølgelig også en metode til at behandle button.click eventen på gemme knappen og en gem metode som denne kalder...de ser ud som følger.

private void btnGem_Click(....)
{
    gemAndenTabel();
}

private void gemAndenTabel()
{
   
    int i=0;
    string tekst;
    while(i<andenTabel.Rows.Count;)
    {
      tekst=((TextBox)(andenTabel.Rows[index].cells[index].comtrols[index])).Text
          i++;               
    }
}

Mit problem er at i metoden gemAndenTabel() er andenTabel.Rows.Count altid 0, hvilket undrer mig. Jeg har jo lige siddet og fyldt tekst inde i flere tekstbokse, i flere rækker, i tabellen "andenTabel", så den burde jo ik være 0!!!?
Avatar billede snepnet Nybegynder
21. august 2004 - 11:27 #10
hej frostedflake - undskyld ventetiden (har været væk fra orglet siden igår middag).

tak for koden.... det må jo siges at være meget som du har beskrevet, men det giver mig desværre ikke bedre muligheder for at finde ud af hvad der kan være problemet :o(
(ked af at du brugte tid på det.... jeg har nok ikke formuleret mig klart nok)

det jeg prøvede at skrive var, at det er den kode du bruger til at lave tabellerne der synes at være interessant, og hvis du har noget aspx-kode som er relevant i forhold til dem - er det ligeledes væsentligt.

om du har angivet dem deklarativt i aspx-koden, eller indsætter dem programmatisk er væsentligt for mig at vide.

såhh.... hvis du har mulighed for at poste tilstrækkeligt til at jeg kan se hvordan du indsætter/generere/opretter/maler/skruer dine tabeller sammen tror jeg der er større sansynlighed for at jeg kan hjælpe.

mvh
Avatar billede frostedflake Nybegynder
21. august 2004 - 11:42 #11
Jeg har ik lige adgang til min kode fra den comp. jeg sidder ved nu, men jeg ka fortælle at jeg indsætter/generere/opretter/maler/skruer mine tabeller sammen programmatisk :-). Altså alle celler og rows bliver genereret i nogle løkker og recursive kald, men tabellerne som jeg sætter dem ind i har jeg bare hentet ind fra toolbaren i VisualStudio.net og placeret i en alm html tabel.
Avatar billede snepnet Nybegynder
21. august 2004 - 11:54 #12
ok - tak :o)

En lille illustration :

i aspx-filen :

<asp:Table id="Table1" runat="server"></asp:Table>
<asp:Button id="Button1" runat="server"    Text="Button"></asp:Button>


og i din code-behind :

private void Page_Load(object sender, System.EventArgs e)
{
    // Put user code to initialize the page here
    if(!IsPostBack)
    {
        TableRow trow = null;
        TableCell tcell = null;
        TextBox tb = null;
        for(int i=0;i<5;i++)
        {
            trow = new TableRow();
            for(int j=0;j<5;j++)
            {
                tcell = new TableCell();
                tcell.Controls.Add(tb = new TextBox());
                trow.Cells.Add(tcell);
            }
            Table1.Rows.Add(trow);
        }               
    }
}

private void Button1_Click(object sender, System.EventArgs e)
{
    // her findes din rækker ikke
}

Ovenstående er selvfølgelig en simplificering af det du har sat op, men er det det principielt det du har omkring tabellerne ?
Avatar billede snepnet Nybegynder
21. august 2004 - 12:07 #13
pointen i det er, at hvis du ikke få eksekveret den kode der genererer tabellen INDEN din gem-handler eksekveres, vil du aldrig kunne finde dine rækker mv. igen, da de ikke er blevet sat ind i kontroltræet.

som jeg forstår det du har lavet kræves det faktisk at din "node-click handler", eksekveres for at du har dine rækker.

det kan du desværre ikke gøre noget ved - det er simpelthen bare sådan det virker, og du bliver nødt til at sikre at de nødvendige rækker indsættes hver gang... der er ikke noget der blever "gemt for dig" hvad det angår.

hvis rækkerne sættes ind, og du f.eks. har en stak tekstbokse i rækkerne, skal frameworket nok sørge for at de værdier brugeren har indtastet bliver sat på de respektive objekter (f.eks. dine tekstbokse), men som din kode virker nu, er der simpelthen ikke noget at fylde det ind i.

forstå du hvad jeg mener - eller er det sort ?
Avatar billede frostedflake Nybegynder
23. august 2004 - 14:22 #14
jeg tror jeg forstår hvad du mener....jeg skal altså have fyret en nodeclick event, til den tilsvarende handler, af for at beholde min tabel med de nye indførelser!!?

Ja jeg prøver det lige....så får vi se om det virker.
Avatar billede frostedflake Nybegynder
23. august 2004 - 14:40 #15
øv det virker ik.....hmm nå...jeg har tænkt på at bruge et datagrid istedet...altså på den måde at jeg vil opbygge en alm ArrayList på samme måde som jeg har bygget den nuværende tabel op og så databinde datagriddet til ArrayListen....håber at Datagriddet har indbygget funktionalitet til at holde på dataene.
Avatar billede snepnet Nybegynder
23. august 2004 - 14:45 #16
hej frosted :o)
vis mig lige det du ikke kan få til at virke... Det vil ikke hjælpe dig at bruge et datagrid istedet, hvis problemet er det jeg har beskrevet.
Avatar billede frostedflake Nybegynder
25. august 2004 - 14:36 #17
Hmm jeg ka kun sende seudo-kode herind...du ved foretningshemmeligheder og sådan....Det meste af den overordnede kode er illustreret med den seudo-kode jeg sendte sidst...hvis der er nogle dele af den du gerne vil have have uddybed, med mere seudo-kode, så sig til.....jeg ska jo gerne have det her løst.  :-)
Avatar billede snepnet Nybegynder
02. oktober 2004 - 03:13 #18
aloha frostedflake... jeg kan se at jeg har syltet dig her. det må du undskylde :o(
(har været uopmærksom).

jeg forsøger at se om jeg kan få ryttet lidt op, så du får et svar på denne her, hvis du kunne bruge det til noget, men du skal bare spørge hvis der er noget.

mvh
Avatar billede snepnet Nybegynder
21. oktober 2004 - 19:48 #19
frostedflake ?
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