Avatar billede netro Nybegynder
29. februar 2008 - 20:16 Der er 7 kommentarer og
1 løsning

Databound repeater

Nedenstående repeater bindes til en datatable og udskriver fx 5 tekstbokse. Brugeren skal nu have mulighed for at vælge fx 7 bokse i stedet. Det kræver bare, at der bygges en ny datatable og bindes igen.

Men hvordan kan jeg bevare den tekst, der måske allerede er indtastet i boksene, når jeg binder igen?


    <asp:Repeater ID="myRepeater" runat="server">
        <ItemTemplate>
            <asp:Label ID="Label1" runat="server" Text='<%# Eval("MyText") %>' />
            <asp:TextBox ID="TextBox1" runat="server" /><br />
        </ItemTemplate>
    </asp:Repeater>
Avatar billede thesurfer Nybegynder
29. februar 2008 - 20:36 #1
Ved submit ville jeg aflæse navnene på boksene og deres værdier. Dem kan du smide i en array eller liste.

Når du så afvikler din repeater, checker du om navnet på indekset i array matcher navnet på nuværende textbox, der skal udskrives. Hvis navnene matcher, hiver du værdien på det indekset i array ud, og smider det i value på textboxen.
Avatar billede netro Nybegynder
29. februar 2008 - 20:52 #2
Det havde jeg faktisk overvejet, men tænkte at det er lidt omstændigt, når der er mange forskellige data i hvert repeater item.
Avatar billede thesurfer Nybegynder
29. februar 2008 - 21:19 #3
Du bliver nok nødt til at komme med en nærmere forklaring, på dit indlæg.. måske evt noget mere kode..

For mig virker det lige til.. :-)
Avatar billede netro Nybegynder
29. februar 2008 - 21:57 #4
Okay, et eksempel. Her udskrives 10 rækker, og det er så det tal, der dynamisk kan ændres til et andet tal. Hvis det fx ændres til 6, så skal det man har indtastet tekstboksene i række 1-6 bibeholdes.


<asp:Repeater ID="myRepeater" runat="server">
  <ItemTemplate>
      <asp:Label ID="Label1" runat="server" Text='<%# Eval("MyText") %>' /><br />
      <asp:TextBox ID="TextBox1" runat="server" /><br />
      <asp:TextBox ID="TextBox2" runat="server" /><br />
      <asp:TextBox ID="TextBox3" runat="server" /><br />
      <asp:TextBox ID="TextBox4" runat="server" /><br />
      <asp:TextBox ID="TextBox5" runat="server" /><br /><br />
  </ItemTemplate>
</asp:Repeater>


DataTable dt = new DataTable();
dt.Columns.Add("MyText", typeof(string));

for (int i = 1; i <= 10; i++)
  dt.Rows.Add("Række nr " + i.ToString());

this.myRepeater.DataSource = dt;
this.myRepeater.DataBind();
Avatar billede netro Nybegynder
29. februar 2008 - 21:58 #5
Brugeren vælger antallet af rækker i en DropDown. Derefter laves et postback og repeateren databindes til en datatable med det antal rækker.
Avatar billede netro Nybegynder
01. marts 2008 - 02:19 #6
Jeg har brygget videre på din idé. Opbygger først en ControlCollection med de gamle items, databinder herefter og overfører til sidst værdier for de gamle til de nye kontroller vha. et par metoder, der søger efter nestede kontroller ud fra type eller ID. Så bare læg et svar.
Avatar billede thesurfer Nybegynder
01. marts 2008 - 15:37 #7
Det lyder godt.. :-)

Beklager at jeg ikke svarede i går.. jeg var bare træt efter en lang arbejdsdag..

Held og lykke med projektet :-)

- Svar.
Avatar billede netro Nybegynder
02. marts 2008 - 20:53 #8
Tak :)
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