Cedric
Legacy Member
Ik moet dynamisch belstellijnen toevogen aan een bestelform MET een ajax CalenderExtender wanneer ik op een knop (addrow) duw.
Mijn oplossing hiervoor was een Web user control aanmaken waar ik elke rij + die CalenenderExtender aan toevoeg.
Ik benoem alle controls met hun originele id's en de UC's noem ik UCBestellijn + i -> waardoor ik de controls kan aanspreken met UCBestellijn1.txtNaam.text
ik pak dat aan door een panel aan te maken, UC aan toe te voegen en panel op te slaan in een Session. Bij het laden van die Pagina overschreef ik dat panel door die Session.
Toen kreeg ik de foutmelding Extender controls may not be registered after PreRender.
Na wat opzoeken las ik dat ik de PreRender Method moest overriden met de volgende code
protected override void OnPreRender(EventArgs e)
{
// add base.OnPreRender(e); at the beginning of the method.
base.OnPreRender(e);
// codes to handle with your controls.
...
}
op de plaats van die ... zet ik dan het panel gelijk aan de session.
Voorlopig leek dit te werken totdat ik besefte dat, wanneer die OnPreRender afgelopen is, die controls niet meer op het panel staan, waardoor ik steeds maar 1 bestellijn zie op mijn pagina.
Ik heb het internet al platgezocht naar een oplossing
Hieronder de volledige code: Ik heb aanduidingen gemaakt in het rood
MVG
Cedric
Mijn oplossing hiervoor was een Web user control aanmaken waar ik elke rij + die CalenenderExtender aan toevoeg.
Ik benoem alle controls met hun originele id's en de UC's noem ik UCBestellijn + i -> waardoor ik de controls kan aanspreken met UCBestellijn1.txtNaam.text
ik pak dat aan door een panel aan te maken, UC aan toe te voegen en panel op te slaan in een Session. Bij het laden van die Pagina overschreef ik dat panel door die Session.
Toen kreeg ik de foutmelding Extender controls may not be registered after PreRender.
Na wat opzoeken las ik dat ik de PreRender Method moest overriden met de volgende code
protected override void OnPreRender(EventArgs e)
{
// add base.OnPreRender(e); at the beginning of the method.
base.OnPreRender(e);
// codes to handle with your controls.
...
}
op de plaats van die ... zet ik dan het panel gelijk aan de session.
Voorlopig leek dit te werken totdat ik besefte dat, wanneer die OnPreRender afgelopen is, die controls niet meer op het panel staan, waardoor ik steeds maar 1 bestellijn zie op mijn pagina.
Ik heb het internet al platgezocht naar een oplossing
Hieronder de volledige code: Ik heb aanduidingen gemaakt in het rood
MVG
Cedric
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using TraceringAntibiotica.Service;
using System.Drawing;
using TraceringAntibiotica.Domain;
using TraceringAntibiotica.Domain.Enumerations;
using System.Web.UI.HtmlControls;
namespace Antibiotica.Web
{
public partial class Opzoeken_Patient : System.Web.UI.Page
{
HtmlTable table;
int i;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Session[SessionEnum.Key.i.ToString()] = 1;
table = new HtmlTable();
table.Border = 1;
Session[SessionEnum.Key.tabel.ToString()] = table;
Session[SessionEnum.Key.panel.ToString()] = pnlBestelLijnen;
}
table = (HtmlTable)Session[SessionEnum.Key.tabel.ToString()];
Gebruiker gebruiker = (Gebruiker)Session["user"];
PnlMenu1.BackColor = Color.White;
//fill Verpleekundige gegevens
txtVerpleegkundigePersoneelsNr.Text = gebruiker.PersoneelsNummer;
txtVerpleegkundigeVoornaam.Text = gebruiker.Voornaam;
txtVerpleegkundigeNaam.Text = gebruiker.Naam;
txtVerpleegkundigeEenheid.Text = gebruiker.VerpleegEenheid.ToString();
//fill arts gegevens
if (Session[SessionEnum.Key.GeselecteerdeArts.ToString()] != null)
{
Arts arts = (Arts)Session[SessionEnum.Key.GeselecteerdeArts.ToString()];
txtNaamVoorschrijvendeArts.Text = arts.Naam;
txtVoorNaamVoorschrijvendeArts.Text = arts.Voornaam;
}
//test.Controls.Add(table);
}
protected void btnOpzoekenPatient_Click(object sender, EventArgs e)
{
}
protected void btnSelecteerAndereArts_Click(object sender, EventArgs e)
{
Response.Redirect("opzoeken_arts.aspx");
Session[SessionEnum.Key.GeselecteerdeArts.ToString()] = null;
}
protected override void OnPreRender(EventArgs e)
{
// add base.OnPreRender(e); at the beginning of the method.
int i = pnlBestelLijnen.Controls.Count;
base.OnPreRender(e);
i = pnlBestelLijnen.Controls.Count;
// codes to handle with your controls.
pnlBestelLijnen = (Panel)Session[SessionEnum.Key.panel.ToString()];
i = pnlBestelLijnen.Controls.Count; [COLOR="Red"][B]-> Hier zit nog een control, dus wordt afgebeeld op de pagina[/B][/COLOR] }
protected void btnToevoegenBestellijn_Click(object sender, EventArgs e)
{
int oi = pnlBestelLijnen.Controls.Count; [B][COLOR="Red"]-> Hier is de control weg[/COLOR][/B] int i = (int)Session[SessionEnum.Key.i.ToString()];
Control uc = LoadControl("UCBestellijn.ascx");
uc.ID = "uc" + i;
pnlBestelLijnen.Controls.Add(uc);
oi = pnlBestelLijnen.Controls.Count;
Session[SessionEnum.Key.panel.ToString()] = pnlBestelLijnen;
i++;
Session[SessionEnum.Key.i.ToString()] = i;
}
}
}