Avatar billede lasserasch Juniormester
17. oktober 2007 - 14:06 Der er 32 kommentarer og
1 løsning

Gemme table rækker til SQL db fra website.

Hejsa.

Jeg har et system.web.ui.webcontrols.table

Dette fylder jeg med nogle data ved load af min side.

I cell 2 ligger en checkbox.


Uden for dette table har jeg en knap. Når jeg trykker på denne knap vil jeg gerne have opdateret min SQL DB.

Jeg forsøger med følgende kode, som jeg kalder ved btn_save_click eventet :



void SaveTaskStatus ( int UserId )
        {
            foreach (TableRow R in TaskTable.Rows)
            {
                if (R.Cells.Count > 2)
                {
                    CheckBox cb = R.Cells[2].Controls[0] as CheckBox;
                    SQLCall.Sqlnonquery("update tbusercreationtasklist set executed = " + Convert.ToInt32(cb.Checked) + " where employid = " + UserId);
                }
            }
        }

Men ved tryk på knappen bliver der jo lavet et postback af siden, og alle mine data fra mit table er væk.

Er det mig som griber dette helt forkert an?

/Lasse
Avatar billede neoman Novice
17. oktober 2007 - 14:15 #1
Jeps  - svaret er det samme som i dit forudgående spørgsmål: Fylde data i kun ved !PostBack
Avatar billede kalp Novice
17. oktober 2007 - 14:17 #2
Når du laver post back bliver din "Page load" kørt som det første..

Derfor har man mulighed for at tjekke på "IsPostBack" så den ikke altid kører det der står i page load - f.eks ved post back.
Avatar billede lasserasch Juniormester
17. oktober 2007 - 14:37 #3
Jeg tjekker på om det er et postback i "page load".

Og hvis det er, så fylder jeg ingen data i mit table.

Men mit table er stadig tomt :-(

Helt præcist sker der følgende :

-------------------

        {
            if (!Page.IsPostBack)
            {
                LoadDepartments();
            }
            else
                try
                {
                    String Action = Request.QueryString["Action"].ToString();
                    String User = Request.QueryString["User"].ToString();
                    switch (Action)
                    {
                        case "UpdateTaskList": SaveTaskStatus(Convert.ToInt32(User)); break;
                    }
                }
                catch { };


-------------------


Og den går så fint ned til SaveTaskStatus().

Her bliver følgende kode så kørt :

-------------------
void SaveTaskStatus ( int UserId )
        {
            foreach (TableRow R in TaskTable.Rows)
            {
                if (R.Cells.Count > 2)
                {
                    CheckBox cb = R.Cells[2].Controls[0] as CheckBox;
                    SQLCall.Sqlnonquery("update tbusercreationtasklist set executed = " + Convert.ToInt32(cb.Checked) + " where employid = " + UserId);
                }
            }
        }
-------------------

Men mit table er pære tomt. :-(

/Lasse
Avatar billede kalp Novice
17. oktober 2007 - 14:38 #4
er ViewState enabled?
Avatar billede neoman Novice
17. oktober 2007 - 14:43 #5
Tilføjer du rækker/celler dynamisk i LoadDepartments(); ? I så fald skal rækkerne tilføjes ved hvert load - men kun tilskrives indhold når !PostBack
Avatar billede neoman Novice
17. oktober 2007 - 14:47 #6
Desuden:
          else
                try
                {
                    String Action = Request.QueryString["Action"].ToString();
                    String User = Request.QueryString["User"].ToString();
                    switch (Action)
                    {
                        case "UpdateTaskList": SaveTaskStatus(Convert.ToInt32(User)); break;
                    }
                }
                catch { };

kunne ligne nogle grimme levninger fra noget ASP:)

Normalt ville man knytte  SaveTaskStatus(Convert.ToInt32(User)) til en eventhandler trigget af et eller andet brugeren har aktiveret.
Avatar billede neoman Novice
17. oktober 2007 - 15:02 #7
mere præcist end 17/10-2007 14:43:05 : Ved dynamiske kontroller skal disse tilføjes ved hvert load. ViewState husker ikke deres eksistens, og derfor skal de genskabes. Deres data tilgengæld bliver husket i viewstate, så derfor behøver man ikke hælde data i ved hver postback.
Avatar billede lasserasch Juniormester
17. oktober 2007 - 15:16 #8
Jeg tilføje helt korrekt celler og rækker dynamisk.

Men så kommer jeg jo så til den næste ting. For nu kan jeg godt gå alle rækkerne igennem. Men værdien som jeg gerne vil gemme er en true/false værdi fra en checkbox, som jeg dynamisk har tilføjet til en celle.

Hvad gør man så der? Jeg er opretter nu samtlige rækker og celler ved postback.
Og metoden jeg har til det, modtager nu en boolean værdi, som fortæller om den også skal fylde data i cellerne.

Den sætter jeg så til false ved postback.

men den checkbox jeg opretter dynamisk. Det er jo dens værdi jeg gerne vil gemme.

Mine metoder til oprettelse af rækker og celler ser således ud :

---------------------

        TableRow R (Boolean IsHeader, String Text, Boolean CheckBoxValue, int RecordId, Boolean DoDataFill)
        {
            TableRow R = new TableRow();
            if (IsHeader)
            {
                R.BackColor = System.Drawing.SystemColors.ControlLight;
                R.Cells.Add(C(Text, true, false, CheckBoxValue, true, DoDataFill)); R.Cells.Add(C("Oprettet", true, false, CheckBoxValue, true, DoDataFill));
            }
            else
            {
                R.BackColor = System.Drawing.Color.WhiteSmoke;
                R.Cells.Add(C(RecordId.ToString(), true, false, false, false, DoDataFill));
                R.Cells.Add(C(Text, true, false, CheckBoxValue, true, DoDataFill));
                R.Cells.Add(C("", true, true, CheckBoxValue, true, DoDataFill ));
            }
            return R;
        }
        TableCell C (String Text, Boolean Enabled, Boolean IsCheckBox, Boolean CheckBoxValue, Boolean Visible, Boolean DoDataFill )
        {
            TableCell C = new TableCell();
            C.Visible = Visible;

            if (!IsCheckBox) { if (DoDataFill) { C.Text = Text; } }
            else
            {
                CheckBox cb = new CheckBox();
                if (DoDataFill)
                {
                    cb.Checked = CheckBoxValue;
                    cb.Text = Text;

                    if (CheckBoxValue)
                        cb.Enabled = false;
                 
                }
                C.Controls.Add(cb);
            }
            return C;
        }

----------------

Og metoden som bruger overstående ser sådan her ud :

--------------------
            void SetupTaskView ( int UserId, Boolean DoDataFill )
        {
         
                String Department = "";
                SqlDataReader SQDR = SQLCall.Sqlquery("select tbusercreationtasklist.id,  taskid, executed, tbemployees.firstname, tbemployees.lastname, tbinternaldepartments.name, tbtasks.description, tbtasks.priority from tbusercreationtasklist inner join tbtasks on tbusercreationtasklist.taskid = tbtasks.id inner join tbinternaldepartments on tbinternaldepartments.id = tbtasks.internaldepartmentid  inner join tbemployees on tbemployees.id = tbusercreationtasklist.employid where tbemployees.id = " + UserId + " order by name, priority");
                while (SQDR.Read())
                {
                    if (Department == "")
                    {
                        TaskTable.Rows.Add(R(true, "Opgaver - " + SQDR["name"].ToString(), Convert.ToBoolean(SQDR["executed"]), -1, DoDataFill));
                        Department = SQDR["name"].ToString();
                    }
                    else
                    {
                        if (Department == SQDR["name"].ToString())
                        {
                            TaskTable.Rows.Add(R(false, SQDR["description"].ToString(), Convert.ToBoolean(SQDR["executed"]), Convert.ToInt32(SQDR["id"]), DoDataFill));

                        }
                        else
                        {
                            Department = SQDR["name"].ToString();
                            TaskTable.Rows.Add(R(true, "Opgaver - " + SQDR["name"].ToString(), Convert.ToBoolean(SQDR["executed"]), -1, DoDataFill));
                            TaskTable.Rows.Add(R(false, SQDR["description"].ToString(), Convert.ToBoolean(SQDR["executed"]), Convert.ToInt32(SQDR["id"]), DoDataFill));
                        }
                    }
                }

                btn_savetasklist.PostBackUrl = "?User=" + UserId.ToString() + "&Action=UpdateTaskList";

        }
--------------------


Ved at bruge dette, så kan jeg få opdateret min tabel på min SQL Server. Men værdien af checkboxen er hele tiden false.

/Lasse
Avatar billede lasserasch Juniormester
17. oktober 2007 - 15:20 #9
Går ud fra at problemet ligger gemt her :

if (CheckBoxValue)
                        cb.Enabled = false;
                 
                }
                C.Controls.Add(cb);
            }
            return C;
        }

Her tilføjer jeg jo cb til cellen uanset om det er et postback eller ej.
Men hvis jeg ikke gør det, så findes checkboksen ikke når jeg forsøger at gemme til SQL databasen.

/Lasse
Avatar billede neoman Novice
17. oktober 2007 - 15:25 #10
Kan ikke lige genenmskue din kode men fundamentalt to ting:

1. Ved dynamiske kontroller skal de tilføjes igen ved hver postback. Dette gælder også din checkbox. Hvis den har en eller anden initialiseringsværdi skal du sætte den ved den første gang npr kontrollen tilføjes. Hvis det er denne brugeren ændrer i, så skal du ikke selv give den værdier ved efterfølgende postbacks, men aflæse dens værdi når brugeren har klikket på noget.

2. Jeg kan se du bruger den gamle ASP metode med at linke siden til sig selv, og agere  på hvad der ligger i urlen. Så fremt det ikke er af valg, men fordi du ikke ved bedre, så læs lige dette:


Denne er altså ikke nødvendig - det er dertil vi har viewstate + eventhandlers:)

Din btn_savetasklist knap bør trigge en eventhandler, og i denne eventhandler kan du så kalde det den nu engang kalder - vel formentligt din SaveTaskStatus(Convert.ToInt32(User)) ting. Du får eventhandleren frem ved at dobbektklikke på din knap i designeren.
Avatar billede lasserasch Juniormester
17. oktober 2007 - 15:57 #11
Ok, nr. 2 er taget til efterretning.

Men jeg har altså stadig problemer med at holde på værdierne ved postback.

Når der sker et postback, så opretter jeg rækkerne og cellerne, men sætter ikke .Text property for cellen.

Alligevel er cellen's .Text property tom ved postback.

Findes der måske en anden komponent, som holder væriderne ved postback?

/Lasse
Avatar billede neoman Novice
17. oktober 2007 - 16:02 #12
Joh - gridview/repeater/datalist holder fast i deres data.

Din tabel (og hele siden)  har EnableViewstate=True ? For så burde cellerne holde fast i deres tekster.
Avatar billede lasserasch Juniormester
17. oktober 2007 - 19:28 #13
Enableviewstate er sat til true på både celler, rækker og tabellen ja.

For at forenkle koden har jeg lige forsøgt at lave en ny side. Jeg kan dog stadig ikke få det til at virke.

Håber i kan se hvad jeg gør galt her :

-------------------
public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

        if (!Page.IsPostBack)
        {
            AddToTable(true);
        }
    }

    void AddToTable ( Boolean DoDataFill)
    {
        Table1.Rows.Add(R("række1", DoDataFill));
    }
    TableRow R (String Text, Boolean DoDataFill )
    {
        TableRow R = new TableRow();
        R.Cells.Add(C(Text, DoDataFill));
        return R;
    }
    TableCell C (String Text, Boolean DoDataFill )
    {
        TableCell C = new TableCell();
        if (DoDataFill)
            C.Text = Text;
        return C;
    }

    protected void Button1_Click ( object sender, EventArgs e )
    {
        AddToTable(false);
    }
}
-------------------

/Lasse
Avatar billede neoman Novice
17. oktober 2007 - 19:40 #14
protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            AddToTable(true);
        }
    else
        {
        AddToTable(false);
        }
    }
Avatar billede lasserasch Juniormester
17. oktober 2007 - 19:58 #15
Har jeg også prøvet nu. Stadig samme problem...

Har lagt sidste nævnte eksempel ud på nettet som zip fil her :

www.skare.com/website4.zip

/Lasse
Avatar billede neoman Novice
17. oktober 2007 - 20:41 #16
Nu har jeg prøvet alle de krumspring jeg kender,  og kan heller ikke få det op at køre:-(

Jeg bliver nødt til at lægge det til side for nu, men vender tilbage i morgen ved middagstid.
Avatar billede neoman Novice
17. oktober 2007 - 20:53 #17
Inden jeg forlader dig, så skulle jeg lige prøve i VB - det virkede heller ikke med en kopi af din kode. Men, dette her virker:

Partial Class TestCell
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        MakeCell()
        If Not Page.IsPostBack Then
            FillCell()
        End If
    End Sub

    Protected Sub MakeCell()
        Dim r As New TableRow
        Dim c As New TableCell
        r.Cells.Add(c)
        Table1.Rows.Add(r)
    End Sub

    Protected Sub FillCell()
        Table1.Rows(0).Cells(0).Text = "TEST"
    End Sub
End Class

Som du kan se så skaber jeg altid kontrollerne, og ylder dem op kun hvis det ikke er postback.

Kan ikke helt gennemskue den detaljerede forskel mellem de to, men dette her funker altså hos mig.
Avatar billede neoman Novice
17. oktober 2007 - 21:03 #18
Hehe ku ikke la' være: dette her virker også:
    protected void Page_Load(object sender, EventArgs e)
    {

        if (!Page.IsPostBack)
        {
            AddToTable(true);
        }
        else
        {
            AddToTable(false);
        }
    }

    void AddToTable ( Boolean DoDataFill)
    {
        Table1.Rows.Add(R("række1", DoDataFill));
        if (DoDataFill)
        {
            Table1.Rows[0].Cells[0].Text = "TEST";
        }
    }
    TableRow R (String Text, Boolean DoDataFill )
    {
        TableRow R = new TableRow();
        R.Cells.Add(C(Text, DoDataFill));
        return R;
    }
    TableCell C (String Text, Boolean DoDataFill )
    {
        TableCell C = new TableCell();
        return C;
    }
}


Jeg kan ikke rode mere med det nu, men er sikker på at jeg kan komme på en sindrig forklaring, når jeg får sovet på det;)
Avatar billede lasserasch Juniormester
17. oktober 2007 - 23:23 #19
Super.

Har rettet min kode til nu. Det virker super godt nu.
Eneste ting, som jeg stadig ikke kan få den til at huske, er når jeg markerer den checkbox som jeg opretter i en af cellerne.

Hvis checkboksen allerede bliver markeret når jeg løber gennem koden første gang. Dvs. hvis checkboksens .Checked property bliver sat ud fra værdi i min SQL database, så husker den at checkboksen skal være markeret ved postback.

Men hvis checkboksen først bliver checked ved at jeg selv gør det, så husker den ikke .checked property.

Men som sagt, alle de checkbokse som er markeret fra SQL gennemløbet i første omgang. De bliver fint ved med at være markeret.

Og EnableViewstate er sat til true ved checkboksene.

Det er sidste lille krølle på halen, ellers super god hjælp! Takker mange gange for det.

Smid svar for points!

/Lasse
Avatar billede lasserasch Juniormester
17. oktober 2007 - 23:37 #20
Som en sidste bemærkning for i aften :

Når jeg sætter .Checked property for checkboksene ved første load. Altså med værdierne fra min SQL DB, så sætter jeg også checkboksenes Enabled værdi til false sådan her :

if (Convert.ToBoolean(SQDR["executed"]))
                                {
                                    cb.Checked = true;
                                    cb.Enabled = false;
                                }

Kun hvis Enabled er = med : False bibeholder den værdien ved postback.
Hvis Enabled er = med : true, så forsvinder markeringen også ved disse.

:-(

Håber i ved hvad det skyldes.

/Lasse
Avatar billede lasserasch Juniormester
17. oktober 2007 - 23:55 #21
Og aller aller sidste kommentar :

Har fundet forklaringen på hvorfor min fremgangsmåde ikke virkede :

http://codebetter.com/blogs/jeffrey.palermo/archive/2004/11.aspx

Søg efter "postback" via CTRL+B, så finder man det rigtige sted.

Ellers har jeg klippet indlægget ud her :

www.skare.com/eksperten20071017.jpg

Men det med checkboksene forstår jeg stadig ikke.

Nat herfra!

/Lasse
Avatar billede lasserasch Juniormester
18. oktober 2007 - 09:00 #22
Nå nu er jeg kommet lidt længere.

Nu kan jeg få den til at gemme checked property for en checkbox ved postback.
Så det er jo i princippet fint nok.

Men alligevel, så når jeg løber gennem mit table ved postback for at updatere min SQL tabel med checked property for hver række, så er checked = false, selvom den stor med et flueben i når siden vises igen. Det forstår jeg ikke.

Og igen, så de checkbokse som fik sat checked property til true ved generering af tabellen første gang, dem kan den sagtens sætte den korrekte værdi for.

Der må være noget jeg overser.

/Lasse
Avatar billede neoman Novice
18. oktober 2007 - 11:46 #23
Jeg har læst dit link, og i mit parallelle univers, hvor jeg er enehersker, ville den slags sprogforbrydere blive skudt for ikke at udtrykke sig klart. Hans konklusion er entydig nok, men forklaringen er en gang &¤#&#%¤"! :-)

Anyways, jeg selv har nogle applikationer med dynamisk tilføjede rækker/celler og checkboxes som funker fint, så gad vide om det er noget som har gemt sig i koden - kan du vise denne ?
Avatar billede lasserasch Juniormester
18. oktober 2007 - 13:35 #24
Ja, men tror det er bedst at uploade hele projektet til nettet så. Så det er hermed gjort.

Inkl. den SQL DB jeg bruger og en ekstern DLL fil til diverse ting.

Beklager hvis koden er en smule rodet. Jeg har siddet hele formiddagen og prøvet frem og tilbage, uden at få det til at fungere.

Projektet i sin nuværende stand er lagt her : www.skare.com/employsystem.zip

/Lasse
Avatar billede neoman Novice
18. oktober 2007 - 13:57 #25
har kastet et blik - og det farer stadig forvirret rundt derinde:)

Jeg troede lige det kunne ordnes på et sekund, men nej, og jeg kan desværre først kigge på det sent i nat:-( 

Hvis det skulle gå hen og blive uaktuelt i mellemtiden, eller en anden løser problemet,  så skriv her, så jeg ikke bruger energi på non-problems:)
Avatar billede lasserasch Juniormester
18. oktober 2007 - 14:13 #26
Ok, jeg skriver selvfølgelig hvis der sker et gennembrud. Og takker mange gange for hjælpen!

/Lasse
Avatar billede lasserasch Juniormester
18. oktober 2007 - 16:45 #27
neoman -> Tænkte om jeg evt. måtte se en af de applikationer som du sagde du havde, hvor det virker?

/Lasse
Avatar billede neoman Novice
19. oktober 2007 - 01:20 #28
Naturligvis kunne jeg ikke få koden til at køre men pyt:-)

Jeg har naturligvis problemer med at følge logikken, men for mig ser det ud til at ved postback, så bliver SaveTaskStatus kaldt fra Page_Load.  Den kalder så SetupTaskView(UserId, false).

Hvis brugeren har klikket  på Btn_save, så eksekveres ovenstående Page-Load ting, og derpå kaldes Save_User, som så igen kalder SetupTaskView, men denne gang med SetupTaskView(UserId, true);

SetUpTaskView(userID,False)  opretter kontroller uden at tilskrive dem værdier, mens SetUpTaskView(userid,True) opretter kontroller og tilskriver dem værdier fra DB'en


Dvs det som evt måtte have ligget i ViewState bliver overskrevet fra DB'en ved kald nr 2 (forudsat jeg har opfattet kodelogikken korrekt :-)

Gad vide om det ikke er kernen i problemet ?

Jeg kan ikke helt overskue fra koden om antallet af rækker nogensinde ændres efter postback. Hvis dette er tilfældet, så ville jeg meget kraftigt anbefale, at dine celler og din checkbox får tilskrevet et ID således at, f.eks., C.ID="cxx" og CB.ID="cbYY" hvor hvert XX og YY skal være unik.

Ovenstående af hensyn til ViewState - hvis du ikke give kontrollerne specifikke id'er, så bruger frameworket de autogenererede id'er (fra en ende af) til at få fat i ViewState for de respektive kontroller. Hvis antallet af kontroller har ændret sig, elelr nogle rækker er fjernet mens andre bliver tilføjet, så risikerer du at enten får kontrollerne en viewstate som tilhørte andre kontroller af samme type  (fra før postback), eller at det hele fejler (med en fejlmeddelelse), hvis  en "forkert" kontroltype står for tur at få noget guf fra viewstate. Med specifikke id'er, så er frameworket ikke i tvivl om, hvad der skal matches med hvad.

Jeg må desværre ikke fremvise min tilsvarende kode. I princippet er koden ganske som den vist 17/10-2007 20:53:53, dvs jeg har fra PageLoad nogle kald til at opbygge hele sættet af kontroller som pladsholdere for data (labels/literals/links/checkboxes i tabelceller), og så nogle andre kald til at gennemløbe tabellen og fylde data i, som jeg bruger første gang i en eventhandler og ved efterfølgende postbacks fra page_load efter behov.
Avatar billede lasserasch Juniormester
19. oktober 2007 - 09:57 #29
Ok, nu har jeg strikket et meget simpelt eksempel frem, på hvad mit problem er.

som du kan se herunder så har jeg 1 række med 1 celle som indeholder 1 checkbox.
Ved postback er den string værdi jeg forsøger at trække ud, altid = false. Også selvom min checkbox er checked, og stadig ser ud til at være det efter et postback.


public partial class _Default : System.Web.UI.Page
{
  protected void Page_Load(object sender, EventArgs e)
    {

        if (!Page.IsPostBack)
        {
            AddToTable(true);
        }
        else
        {
            AddToTable(false);
        }
    }

    void AddToTable (Boolean DoDataFill)
    {
        TableCell C = new TableCell();
        TableRow R = new TableRow();
        R.Cells.Add(C);
        Table1.Rows.Add(R);

        CheckBox cb = new CheckBox();
        Table1.Rows[0].Cells[1].Controls.Add(cb);
       
        if (!DoDataFill)
        {
            CheckBox checkbox = Table1.Rows[0].Cells[1].Controls[0] as CheckBox;
            String StringsomaltiderFALSE = checkbox.Checked.ToString();
        }
    }
}

Håber det er lettere at gennemskue. Det er nøjagtig samme problem i min rigtige kode. Her er jo så bare en masse andet kode, som forvirrer overblikket.

/Lasse
Avatar billede neoman Novice
19. oktober 2007 - 10:59 #30
public partial class testcb : System.Web.UI.Page
{
  protected void Page_Load(object sender, EventArgs e)
    {

        if (!Page.IsPostBack)
        {
            AddToTable(true);
        }
        else
        {
            AddToTable(false);
        }
    }

    void AddToTable (Boolean DoDataFill)
    {
        TableCell C = new TableCell();
        TableRow R = new TableRow();
        R.Cells.Add(C);
        Table1.Rows.Add(R);

        CheckBox cb = new CheckBox();
        Table1.Rows[0].Cells[0].Controls.Add(cb);
     
        if (!DoDataFill)
        {
            CheckBox checkbox = Table1.Rows[0].Cells[0].Controls[0] as CheckBox;
            String StringsomaltiderFALSE = checkbox.Checked.ToString();
            //Label1.Text = StringsomaltiderFALSE;
        }
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        CheckBox checkbox = Table1.Rows[0].Cells[0].Controls[0] as CheckBox;
        String StringsomaltiderFALSE = checkbox.Checked.ToString();
        Label1.Text = StringsomaltiderFALSE;
    }
}

samt

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="testcb.aspx.cs" Inherits="testcb" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:Table ID="Table1" runat="server"></asp:Table>
        <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
        <br />
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label></div>
    </form>
</body>
</html>

virker som tilsigtet - skal lige tygge lidt på hvorfor din oprindelige kode ikke funker.
Avatar billede lasserasch Juniormester
19. oktober 2007 - 11:05 #31
AHA! Gennembrud!

Når siden reloader, så skal man ganske rigtigt genopbygge tabellen.

Men åbenbart må man ikke tjekke på checkbox værdien i samme metode. Det skal man gøre i button1_click eventet.

Det var sgu da lidt kringlet, men det virker nu!
JUBBBBIIIIEEEEE......

Smid svar neoman! De er sgu fortjent de points!

/Lasse
Avatar billede neoman Novice
19. oktober 2007 - 11:34 #32
fedt nok - jeg har prøvet lidt forskelligt, og er nåetfrem til at følgende virker også (foruden at gøre det i handleren som du også har fået til at virke) :
public partial class testcb : System.Web.UI.Page
{
    protected void Page_Init(object sender, EventArgs e)
    {

        if (!Page.IsPostBack)
        {
        }
        else
        {
            AddToTable(false);
        }
    }
    protected void Page_Load(object sender, EventArgs e)
    {

        if (!Page.IsPostBack)
        {
            AddToTable(true);
        }
        else
        {
            //AddToTable(false);
            CheckBox checkbox = Table1.Rows[0].Cells[0].Controls[0] as CheckBox;
            String StringsomaltiderFALSE = checkbox.Checked.ToString();
            Label1.Text = StringsomaltiderFALSE;
        }
    }
 
    void AddToTable (Boolean DoDataFill)
    {
        TableCell C = new TableCell();
        TableRow R = new TableRow();
        R.Cells.Add(C);
        Table1.Rows.Add(R);

        CheckBox cb = new CheckBox();
        Table1.Rows[0].Cells[0].Controls.Add(cb);
     
        if (!DoDataFill)
        {
            CheckBox checkbox = Table1.Rows[0].Cells[0].Controls[0] as CheckBox;
            String StringsomaltiderFALSE = checkbox.Checked.ToString();
        }
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        //CheckBox checkbox = Table1.Rows[0].Cells[0].Controls[0] as CheckBox;
        //String StringsomaltiderFALSE = checkbox.Checked.ToString();
        //Label1.Text = StringsomaltiderFALSE;
    }
}

Det virker ligeledes hvis man lader "genskabelsen" ske i Page_Load, men så først aflæser værdien i Page_LoadComplete eventet.  Frameworket skal åbenbart have en "tænkepause", fra kontrollen er genskabt, til at den får sin viewstate tilbage:)
Avatar billede lasserasch Juniormester
19. oktober 2007 - 11:57 #33
Ja det er ikke sådan helt logisk efter min mening. Men bare man kender fremgangsmåden så er det jo fint! Har overført ændringerne til min rigtige kode, og det spiller bare nu!

MANGE tak for hjælpen!


/Lasse
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

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