Jeg er ved at implementere en side, hvor man skal kunne udfylde linjer med tre indtastfelter. For enden af hver linje er der en knap, der kan slette linjen med felterne. En anden knap tilføjer en hel ny linje(tre felter med tilhørende slet-knap). Én enkelt linje (tre felter og knap) har jeg implementeret som en control.
Hver control objekt som fremkommer ved et klik på tilføj knappen tilføjes til en arrayliste. Efter tilføj kalder jeg en metode som løber arraylisten igennem og tilføjer controls til en placeholder.
Tilføjelse og præsentation af control i placeholder fungerer perfekt.
Problemet opstår når jeg skal klikker på en fjern knap. Så kaldes en metode som slette control objektet fra arraylisten. Dette fungerer fint. Herefter kalder jeg metoden som løber arraylisten igennem og tilføjer controls til en placeholder (UpdateLoanPlaceholder()). Dette sker, men GUI opdateres ikke i henhold til indholdet i arraylisten. det er kun det objekt der lige er blevet slettet som præsenteres.
Dette er meget mystisk og håber på nogle input til hvordan jeg kan løse problemet og hvordan man bedst arbejder med dynamiske kontrols også når der skal slettes en kontrol og GUi skal opdateres med det samme.
Jeg vil lade koden tale for sig selv.
---------------------------------------
using System; using System.Collections; using System.Web; using System.Web.UI.WebControls; using System.Web.UI; using System.Web.UI.HtmlControls;
namespace xxxxxx.Web.Forms {
public class APO300 : GKUserControlBase { protected Button uiCalculateLoanButton; protected Button uiApplyForLoanButton; protected Button uiAddLoanButton; protected Button uiButton;
protected PlaceHolder GetArrayContents;
protected static ArrayList arrayOfLoans = new ArrayList(); protected static int numberOfLoans = 1;
bruger du 1.1 eller 2.0 (eller... kan du benytte 2.0?)
mht. koden du har sendt... det ser umiddelbart ud som og at alle dine brugere deler de kontroller der ligger i arrayOfLoans.... er det virkelig det du vil?
det ville være en mere klassisk løsning - hvis du holdt din arraylist - indeholdende dine loan-objekter - i session, og så udfra indholdet i listen - renderede f.eks. en repeater med de loan-objekter der er i listen - præsenteret som defineret i en template under repeateren. mvh
well... der er for så vidt mange muligheder, men som udgangspunkt er en statisk variabel fælles for alle brugere. du må lige finde ud af om det er 2.0.... det giver nogle muligheder som ikke er tilstede hvis det er 1.1 - og den måde man laver det på kan være meget forskellig. mvh
har du så en metode der tilføjer eller sletter lån - kan du bygge det på følgende måde:
// i en tilføj-lån-knap-klik-eventhandler: Loan l = new Loan("lånetype"); Loans.Add(l); ShowLoans(); // kalder metoden der sikrer at listen på webformen viser det der ligger i arraylisten.
datagrid'et er en af flere kontroller du kan benytte til den slags - en anden oplagt mulighed er en repeater, der potentielt kan give dig lidt mere frie hænder hvad layout angår.
Vil dette løse mit problem med at det rigtige indhold af arrayet ikke vises efter at et element er blevet fjernet? Showloans er jo meget lig min UpdateLoanPlaceholder metode. Var problemet med min oprindelige kode mht til visning af elemterner efter fjernelse at jeg brugte en placeholder?
well.... dynamiske sider kræver altid lidt arbejde ;o) - men det ville være en sikrere model at følge. prøv at giv det et lille forsøg, og se om du kan få det til at funge på den måde... du må bare spørge her undervejs hvis der er noget der driller. mvh
i ascx-filen står følgende <asp:DataGrid id="ForeignLoansDatagrid" runat="server" /> hvilket giver et output der ser sådan ud: Visible UniqueID EnableViewState TemplateSourceDirectory ID HasUIData ClientID IsPostBack True 73e983c0-29fd-4669-b943-f9f97b14b7e7 True /Forms/APO300 73e983c0-29fd-4669-b943-f9f97b14b7e7 False 73e983c0-29fd-4669-b943-f9f97b14b7e7 True
hvordan får jeg den til at vise de usercontrols der ligger i arrayet og ikke disse værdi-object referencer? Er helt ny til dette datagrid-ting. Kan finde eksempeler for hvordan man uddrager elementer fra et sql træk, men ikke fra et array/Arraylist.
Mit problem er nu, hvordan jeg kan outputte en Button i en ItemTemplate. Altså som jeg har prøvet i ovenstående, men dette giver kun tekst der referere til objektet. Titlen i ovenstående bliver udskrevet korrekt.
som nævnt bør du ikke lægge dine kontroller i session på den måde, men de data der skal benyttes til indsætte dem. du kan ikke sætte en knap ind på den der måde med mindre fra uiRemoveButton returnerer html'en for en knap. mvh
nej det gør de ikke... men hvad er årsagen til at du udover at gemme de data du danner dine kontroller udfra + selve kontrollerne i session? mvh
Synes godt om
Ny brugerNybegynder
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.