Avatar billede Slettet bruger
06. august 2005 - 20:49 Der er 31 kommentarer og
1 løsning

Dynamisk form control

Jeg har i de sidste par dage prøve at løse et problem.

Det drejer sig om at jeg skal lave en tilmeldningsformular som er meget stor. Derfor har jeg valgt at lave den i step.

I forskellige step er lave i hvert sit panel og når man klikker næste disabler den nuværende step og enable næste step.

So far so Good.

En bruger kan i et af de første step vælge hvor mange personer der skal tilmeldes, denne oplysning skal så bruges til at genererer tilsvarende antal textbox i næste step.

Jeg har prøvet at lave en repeater, men jeg har ikke rigtig kunne finde ud af så kunne få fat i det indtastede værdier fra textbox felterne og værdierne bliver ikke gemt hvis man går frem og tilbage i mine steps.

Jeg har google´t mega meget og jeg kan ikke rigtig finde ud af om det er smart det jeg har gang i.

Nogle forslag ?????
Avatar billede snepnet Nybegynder
07. august 2005 - 00:56 #1
hej :o)

allerførst :
har du mulighed for at bruge asp.net 2.0 istedet ? (der ligger sådan en kontrol klar til brug... den hedder simpelthen wizard).

ellers kan du tage et kig på sådan noget som det her :
http://www.eksperten.dk/spm/519579

og spørge videre her self ;o)

mvh
Avatar billede Slettet bruger
07. august 2005 - 15:07 #2
Jeg har desvære ikke mulighed for asp.net 2.0, ville jeg ønske jeg havde da jeg har læst lidt om wizard muligheden.

Jeg kan læse at jeg har samme problem som tchami, jeg vil gerne have en form på en side og jeg vil gerne undgå querystring..

for at ilustrerer min tankegang vil lidt kode nok hjælpe lidt!


-----------------------------
ASPX
--------------------------------
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="test.aspx.vb" Inherits="Conference.test"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
    <HEAD>
        <title>Tilmelding</title>
        <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
        <meta content="Visual Basic .NET 7.1" name="CODE_LANGUAGE">
        <meta content="VBScript" name="vs_defaultClientScript">
        <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
    </HEAD>
    <body MS_POSITIONING="GridLayout">
        <div align="center">
            <form id="Form" method="post" runat="server">
                <asp:panel id="FirstStep" Runat="server">
                    <asp:DropDownList id="SecondStepAntal" runat="server">
                        <asp:ListItem Value="1" Selected="True">1</asp:ListItem>
                        <asp:ListItem Value="2">2</asp:ListItem>
                        <asp:ListItem Value="3">3</asp:ListItem>
                        <asp:ListItem Value="4">4</asp:ListItem>
                        <asp:ListItem Value="5">5</asp:ListItem>
                        <asp:ListItem Value="6">6</asp:ListItem>
                        <asp:ListItem Value="7">7</asp:ListItem>
                        <asp:ListItem Value="8">8</asp:ListItem>
                        <asp:ListItem Value="9">9</asp:ListItem>
                        <asp:ListItem Value="10">10</asp:ListItem>
                    </asp:DropDownList>
                </asp:panel>
                <asp:panel id="SecondStep" Runat="server" Visible="False"></asp:panel>
                <asp:panel id="ThirdStep" Runat="server" Visible="False"></asp:panel>
                <asp:button id="ButtonPrevious" Runat="server" Visible="False" Text="Forrige"></asp:button>
                <asp:button id="ButtonNext" Runat="server" Text="Start tilmeldning"></asp:button>
                <asp:button id="ButtonFinish" Runat="server" Visible="False" Text="Afslut"></asp:button>
            </form>
        </div>
    </body>
</HTML>

---------------------------
CODEBEHIND
---------------------------

    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        If Not Page.IsPostBack Then
            ViewState("CurrentPage") = 1
        End If
    End Sub

    Private Sub ButtonPrevious_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonPrevious.Click
        ShowPage(Integer.Parse(ViewState("CurrentPage").ToString()) - 1)
    End Sub

    Private Sub ButtonNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonNext.Click
        ShowPage(Integer.Parse(ViewState("CurrentPage").ToString()) + 1)
    End Sub

    Private Sub ButtonFinish_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonFinish.Click
        ShowPage(1)
    End Sub

    Private Sub ShowPage(ByVal page As Integer)
        Me.ViewState("CurrentPage") = page
        Select Case page
            Case 1
                Me.ButtonPrevious.Visible = False
                Me.ButtonNext.Visible = True
                Me.ButtonFinish.Visible = False
                Me.ButtonNext.Text = "Start tilmeldning"
                Me.FirstStep.Visible = True
                Me.SecondStep.Visible = False
                Me.ThirdStep.Visible = False
                Exit Sub
            Case 2
                Me.ButtonPrevious.Visible = True
                Me.ButtonNext.Visible = True
                Me.ButtonFinish.Visible = False
                Me.ButtonNext.Text = "Næste"
                Me.FirstStep.Visible = False
                Me.SecondStep.Visible = True
                Me.ThirdStep.Visible = False
                Exit Sub
            Case 3
                Me.ButtonNext.Visible = False
                Me.ButtonPrevious.Visible = True
                Me.ButtonFinish.Visible = True
                Me.ButtonNext.Text = "Næste"
                Me.FirstStep.Visible = False
                Me.SecondStep.Visible = False
                Me.ThirdStep.Visible = True
                Exit Sub
        End Select
    End Sub
Avatar billede Slettet bruger
07. august 2005 - 15:10 #3
I secondstep skal der så genereres antal textbox som man har valgt i DropDownList i firstep, og i thirdstep skal værdierne opsamles.

Hvis man vælger at gå tilbage i step skal oplysningerne man har indtastet stadig være i teksbox

Jeg har kigget på http://www.eksperten.dk/spm/519579, men synes ikke jeg kan greje for det løser mit problem ?????
Avatar billede snepnet Nybegynder
07. august 2005 - 16:02 #4
har du prøvet at køre koden fra tchami's spørgsmål - det skulle snildt kunne håndtere den slags også.
f.eks. kan du lave en constructor til StepTwo der tager parametre der angiver hvordan den skal se ud.

læste du for øvrigt http://www.eksperten.dk/spm/519579#rid4812807 ?

det er bare lidt strøtanker ... der er mange måder at gøre det på..... men det er nok hensigtsmæssigt hvis du definerer dig en datakilde du kan holde i session, og så sørge for at kontrollerne (dine steps) bruger den.

jeg kan ikke lige svare på hvordan den skal se ud eller noget .... og det er lidt afhængigt af hvordan du plejer at gøre den slags. hvis det i sidste ende skal havne i en database, kunne det jo være nogle domæneobjekter, eller et dataset ell.

mvh
Avatar billede Slettet bruger
07. august 2005 - 16:13 #5
Private Sub ShowPage(ByVal page As Integer)
        Me.ViewState("CurrentPage") = page
        Dim i As Integer
        Select Case page
            Case 1
                Me.ButtonPrevious.Visible = False
                Me.ButtonNext.Visible = True
                Me.ButtonFinish.Visible = False
                Me.ButtonNext.Text = "Step2"
                Me.FirstStep.Visible = True
                Me.SecondStep.Visible = False
                Me.ThirdStep.Visible = False
                Exit Sub
            Case 2
                For i = 0 To CInt(Me.Antal.SelectedValue - 1)
                    Dim box As New TextBox
                    box.ID = i
                    Me.SecondStep.Controls.Add(box)
                Next
                Me.ButtonPrevious.Visible = True
                Me.ButtonNext.Visible = True
                Me.ButtonFinish.Visible = False
                Me.ButtonNext.Text = "Step3"
                Me.FirstStep.Visible = False
                Me.SecondStep.Visible = True
                Me.ThirdStep.Visible = False
                Exit Sub
            Case 3
                Me.Page.Response.Write(Me.SecondStep.Controls.Count)
                Me.ButtonNext.Visible = False
                Me.ButtonPrevious.Visible = True
                Me.ButtonFinish.Visible = True
                Me.ButtonNext.Text = "Afslut"
                Me.FirstStep.Visible = False
                Me.SecondStep.Visible = False
                Me.ThirdStep.Visible = True
                Exit Sub
        End Select
    End Sub


Denne kode laver det antal textbox der er brug for i step2, men når man går videre til step 3 er de forsvundet og man kan ikke hente informationerne fra dem..
Avatar billede Slettet bruger
07. august 2005 - 16:18 #6
i sidste ende skal det havne i en database, dog vil jeg helts først gemme når tilmelding er fuldent...

Men okay hvis der ikke umiddelbart er en nemt metode at gøre dette på så kan jeg vel ikke undgå at bruge en eller anden form for datakilde.

Jeg have dog håbet på at man kunne bruge de oprettede textboxes som datakilde
Avatar billede Slettet bruger
07. august 2005 - 16:22 #7
Jeg har ikke prøvet at køre koden fra tchami's spørgsmål, desuden er jeg ikke helt skarp i CS, jeg bruger VB.

Jeg kan ikke helt se hvor i koden der bliver lavet et variabel antal form elementer, f.eks textbox
Avatar billede snepnet Nybegynder
07. august 2005 - 16:51 #8
det gør der heller ikke ... men det kan det snildt udvides til.
... jeg er lidt usikker på hvor dynamisk du har behov for at det skal være, og hvad der skal til for at beskrive din wizard, men det er jeg sikker på at du kan definere.

så kan du f.eks. lave en klasse som måske holder alle oplysninger for gennemførelsen (currentStep, NumberOfTextBoxes, tilstandsoplysninger og den slags).

og du kan så gemme en instans af den klasse i session, og arbejde direkte på den..... en slags wizarddatasource - med lidt logik.

når wizarden så er gennemført - skal den så kunne gemmes går jeg ud fra.

... men som sagt... jeg er usikker på dynamikken. er det eneste der skal være dynamisk omkring det den med antallet af tekstbokse?

mvh
Avatar billede snepnet Nybegynder
07. august 2005 - 17:05 #9
du behøver ikke gemme det i selve basen før wizarden er gennemført... men du skal stadig have noget at gemme dine data i indtil det sker, og hvis men f.eks. kan skifte frem og tilbage med steps'ne, tror jeg det vil blive nemmest for dig at gemme det i stil med det beskrevne.
mvh
Avatar billede Slettet bruger
07. august 2005 - 18:10 #10
Jeg tror jeg har fundet noget jeg kan bruge her:
http://samples.gotdotnet.com/quickstart/util/srcview.aspx?path=/quickstart/aspplus/samples/webforms/ctrlauth/templates/Repeater2.src&file=VB\Repeater2.aspx&font=3

lige et andet spørgsmål, Kan man ikke oprette en arraylist som ikke bliver slettet når man skifter step ???
Avatar billede snepnet Nybegynder
07. august 2005 - 18:16 #11
jo - hvis du lægger den i session eller tilsvarende.
du har også muligheden for at lægge det i viewstate, men det er sjældent en god idé med den slags, og det kræver at dine objekter kan serialiseres.
mvh
Avatar billede Slettet bruger
07. august 2005 - 18:27 #12
jeg har funde ud af hvordan jeg kan få værdierne over i næste step.

Jeg tror at jeg så laver hidden fiels til at videre føre værdierne med til de næste step igen, og på den måde kan jeg også gå tilbage i steps og vise værdierne.

Lyder det som en nogenlunde ide ?? tænker på performence ?
Avatar billede snepnet Nybegynder
07. august 2005 - 18:32 #13
viewstate er et hidden field.
Avatar billede snepnet Nybegynder
07. august 2005 - 18:43 #14
med den model du har lagt op til - vil du kunne gemme det i viewstate, hvis det er noget der kan serialiseres.
det kan bare blive en lidt voldsom form, med lidt meget kode hvis du laver hvert step i et panel der eksisterer direkte på formen.
meeen.... så længe det ikke er særlig omfattende steps går det jo nok :o)
mvh
Avatar billede Slettet bruger
07. august 2005 - 18:45 #15
det er meget omfattede steps desvære
Avatar billede snepnet Nybegynder
07. august 2005 - 18:56 #16
hmmm.... så tror jeg du skal overveje at opdele det lidt, men det vil så også medføre at du skal holde dine data i andet end viewstate/egne hidden fields.
har du prøvet at arbejde med user controls?
mvh
Avatar billede Slettet bruger
07. august 2005 - 19:04 #17
ikke rigtigt, det er først 1 mdr tid siden at jeg startede med asp.net så jeg er lidt grøn.

Ikke sådan ligetil at lavet en dynamisk multi step form
Avatar billede Slettet bruger
07. august 2005 - 19:07 #18
hvis du har et simpel eksempel med 3 step, hvor man vælger en værdi i første step som bruges til at genererer antal tekstbokse i 2 step og tilsidst i tredje step opsamler værdierne.

Desuden skal man kunne navigerer frem og tilbage i steps uden indtastede data mistes.

Altså hvis du har en skelet af en art. Det kan være det kan give mig en bedre forståelse
Avatar billede snepnet Nybegynder
07. august 2005 - 19:09 #19
ok - det skal du få.
mvh
Avatar billede Slettet bruger
07. august 2005 - 19:11 #20
Jamen det vil jeg se frem til :-) 1000 Tak
Avatar billede Slettet bruger
07. august 2005 - 19:15 #21
Bare lige for at give baggrunden for udvikligen.

Jeg frivilligt og laver et system hvor man kan tilmelde sig til en konference.
En registrant tilmelder sig og kan tilmelde et x antal personer. Hver person skal så knyttes til forskellige resource m.v.
Avatar billede snepnet Nybegynder
07. august 2005 - 20:57 #22
hmm.... knyttes til forskellige ressourcer - det lyder lidt anderledes end jeg lige umiddelbart havde forestillet mig.
jeg smutter i biffen nu - kunne du lægge lidt yderligere kommentarer om hvad der mere præcist skal kunne udføres i de steps der - eller har du evt. et link til nogle forslag til skærmbilleder ell. ?
mvh
Avatar billede snepnet Nybegynder
07. august 2005 - 22:21 #23
altså .... det ville være rart, hvis du på en eller anden måde kunne fortælle noget der kunne indikere hvad der skal ende med at være resultatet.... altså - hvad er det der i sidste ende skal havne i databasen.
mvh
Avatar billede Slettet bruger
07. august 2005 - 22:55 #24
FirstStep:
Registrant indtaster stadard information såsom navn og adresse, derudover skal registrant vælge hvor manger deltager der skal tilmeldes.

SecondStep:
Her skal alle navne på personer der skal tilmeldes samt der skal vælges en alder fra dropdownlist

ThirdStep:
her skal alle personer vælge hvordan de vil overnatte fra dropdownlist, f.eks. på værelse eller på campingplads.

dette er et lille udsnit af hvad der skal registrers, men hvis der kan laves det som jeg har skrevet at resten stort ses bare copy paste :)
Avatar billede snepnet Nybegynder
07. august 2005 - 23:42 #25
mmm.... umiddelbart lyder step2 mere som en helt almindelig add/remove ting - altså viden om hvad der er indtastet på forrige step gør ikke nogen forskel.... der er de tilmeldinger som man tilføjer - så der er vel ingen grund til at du overføre en sådan værdi fra step1 eller ?
mvh
Avatar billede Slettet bruger
07. august 2005 - 23:44 #26
Dette er korrekt, det eneste der er nødvendigt at vide i step 2 er antallet af personer der skal tilmeldes så der kan laves tilsvarende teksbokse og dropdownlister
Avatar billede snepnet Nybegynder
08. august 2005 - 00:10 #27
hm... har du en messengerkonto - så kan vi skrive lidt der også. det går lidt hurtigere, og vi kan bare lægge kommunikationen herud også efterfølgende.
mvh
Avatar billede snepnet Nybegynder
08. august 2005 - 00:10 #28
men ... jeg damper i seng nu - jeg er på engang efter middag imorgen... så kan vi skrives ved der.
mvh
Avatar billede Slettet bruger
08. august 2005 - 00:18 #29
Helt i orden, nu skal du jo ikke knokle for vildt for min skyld.

Jeg takker allerede for din hjælp
Avatar billede Slettet bruger
08. august 2005 - 02:50 #30
Jeg tror jeg efterhånden har fundet en rimelig løsning, så afvendt lige med at gå i krig men det helt vilde. Nu må jeg også hoppe i seng :)
Avatar billede snepnet Nybegynder
07. september 2005 - 16:53 #31
halløjsa - hvordan går det her?
(du får lige et svar hvis du vil lukke)
mvh
Avatar billede Slettet bruger
09. september 2005 - 22:38 #32
Jamen, jeg fandt en løsning der virkede, tak for inputs.
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