26. oktober 2005 - 12:00Der er
30 kommentarer og 1 løsning
UserControl & CodeBehind ( Haj søges)
her kommer lige en længere smørre kode.. Spørgsmålene kommer herefter ;) --------------------------------------------------------------- Default.aspx--> <%@ Page Language="C#" Debug="true" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
</form> </body> </html> ---------------------------------------------------------- Default.aspx.cs--> using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.Adapters ; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Collections; using myClass; using System.Reflection;
public partial class _Default : System.Web.UI.Page { protected void Page_Load(Object Sender, EventArgs e) { ArrayList values = new ArrayList(); UserControl uc = null; uc = (UserControl)LoadControl("myControl.ascx");
--------------------------------------------------------- myClass.cs--> using System; using System.Data; using System.Data.OleDb; using System.Text; using System.Text.RegularExpressions; using System.Web.UI.WebControls;
namespace myClass {
public abstract class person : System.Web.UI.UserControl { protected System.Web.UI.WebControls.TextBox t1; string name;
public void setValue(string s) { this.name = s; t1.Text = s; } public string getName() { return this.name; }
} } ----------------------------------------------------------- Mit grundlæggende problem er nok manglende erfaring med .NET :)
Men udover det er det userControls der volder mig lidt problemer.
1. Har lavet en klasse(myClass)hvor jeg kan oprette en person. Dette er ikke gjort af lyst, men det var det eneste eksemple jeg kunne få til at køre...Så findes der en måde hvorpå jeg kan have min myClass.cs kode i myControl.ascx.cs istedet..har prøvet men kan ikke få det til at virke.
2. på default.aspx.cs vil jeg nu gerne oprette denne userControl on the fly. Det er mig muligt at trække den ind på .aspx siden. Det er også lykkeds mig at oprette den på aspx.cs siden og putte den i en repeater, der så spytter den ud på .aspx siden.
Hvad der dog ikke er lykkeds mig, er at manupulere med "name" i myClass.person.
hvis jeg sætter tagget (<uc1:myControl ID="MyControl1" runat="server" />) uden for min repeater, kan jeg finde MyControl1 på code behindsiden og også tilgå de 2 metoder der er iden.
----------- helt enkelt vil jeg gerne kunne oprette min usercontrol "on the fly" på default.aspx.cs siden, fylde data i dem og tilsidst få dem vist gennem en repeater.
om koden til min usercontrol ligger i en klasse eller i myControl.ascx.cs eller myClass er ikke så vigtigt...Men er det rigtigste ikke at den skal ligge i myControl.ascx.cs?
Håber nogen forstår mit spørgsmål, ellers må i endelig spørge. muligvis griber jeg det helt forkert an...Håber under alle omstændigheder at nogen der ude kan hjælpe mig videre ;)
koden har ikke nogen højere mening, andet end at lære principperne bag denne problemstilling at kende....og skulle gerne føre til at jeg kan løse den opgave jeg sidder og kigger på :)
ja jeg får 1-4 insanser af min usercontrol..men ved aldrig hvormange. Så jeg bliver nødt til at kunne oprette og vise dem OnTheFly. selve userControlen skal vise en graf og lidt data, altsammen pakket ind i en lille tabel struktur.
dette eks. er bare til test og jeg har lavet en TextBox som eneste element i controlen...Men somsagt er det bare for at lære principperne at kende..
Nej helst ikke...Skulle gerne kunne oprette userControlen, så sætte værdieren..Og først da lægge dem ind i repeateren. dette så gentaget X-antal gange.
måske behøves det ikke. hvis du vil sætte værdien af tekstboxen. kan du sætte den i codebehind med: uc.t1.Text = "en tekst"; er det noget i den stil du vil gøre ?
Jep det ville være godt hvis jeg kunne gøre det på den måde...MJeg kan dog ikke finde t1 på uc objektet....Det giver følgende fejl. 'System.Web.UI.UserControl' does not contain a definition for 't1'
nej men en usercontrol indeholder jo et fast antal felter. Det smukke ved en repeater er at den automatisk gennemløber alle rækkerne i i datasourcen og viser sig selv engang for hver gennemløb.
ok..så er det faste felter jeg gerne vil have vist..
Altså...min userControl indeholder en textbox, og denne skal tildeles en værdi.
så hvordan griber jeg det an, hvis jeg vil oprette 3 instanser af min usercontrol, gerne vil sætte navn på dem alle og derefter få dem vist på forsiden?
default.aspx.cs using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using System.Collections; using System.Reflection;
/// <summary> /// Summary description for _Default. /// </summary> public class _Default : System.Web.UI.Page { protected Repeater Repeater1; private void Page_Load(object sender, System.EventArgs e) { ArrayList values = new ArrayList(); values.Add(new person("test", 15)); values.Add(new person("test24", 34)); Repeater1.DataSource = values; Repeater1.DataBind();
}
#region Web Form Designer generated code override protected void OnInit(EventArgs e) { // // CODEGEN: This call is required by the ASP.NET Web Form Designer. // InitializeComponent(); base.OnInit(e); }
/// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { this.Load += new System.EventHandler(this.Page_Load); } #endregion }
Er virkelig ked af at jeg ikke kan forklare mig bedre, 1000 tak for al din tid, forstår godt hvis du ikke gidder mere ;). Men det er desværre ikke helt det jeg har brug for, da Usercontrollen er omdrejnings punket for min løsning. Denne skal kunne initialisere og tildeles værdier, før jeg sender den vider til frontsiden.
så hvad er fremgangs måden hvis jeg gerne vil have en userkontrol med en textBox. derefter oprette 3 instancer af denne på default.aspx.cs, tildele alle 3 instancer en værdi, og så få alle 3 instanser vist på siden.
Jeg vil prøve at kigge lidt på placeholderen.... Det bringer mig dog ikke vidre angående tilgangen af textboxen på usercontrollen.
uc.t1.Text = "en tekst"; virker ikke og giver følgende fejl. 'System.Web.UI.UserControl' does not contain a definition for 't1'
Skulle du komme på hvorfor jeg ikke kan tilgå t1 som ovennævnt, eller på hvordan jeg skal lave min UserControl, for at kunne dette, må du gerne lige smide en kommentar eller mail.
endnu engang 1000 tak for al din tid. smid et svar;)
prøv med: default.aspx.cs: using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using System.Collections; using System.Reflection;
/// <summary> /// Summary description for _Default. /// </summary> public class _Default : System.Web.UI.Page { protected Repeater Repeater1; protected PlaceHolder plc; private void Page_Load(object sender, System.EventArgs e) { ArrayList values = new ArrayList(); for(int i = 0;i<5;i++) { UserControl uc = null; uc = (UserControl)LoadControl("myControl.ascx"); TextBox tb =(TextBox)uc.FindControl("t1"); tb.Text = "noget nummer "+i; plc.Controls.Add(uc);
}
}
#region Web Form Designer generated code override protected void OnInit(EventArgs e) { // // CODEGEN: This call is required by the ASP.NET Web Form Designer. // InitializeComponent(); base.OnInit(e); }
/// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { this.Load += new System.EventHandler(this.Page_Load); } #endregion
det giver dog bare et nyt problem at jagte ;). ----------------------------------------------------------------------------- Lad os antage at myUsercontrol stadig har sin textBox(t1)...og derfor metoden
Private void setTextBoxValue(string s); { this.t1.text = s; } skal være public void setTextBoxValue(string s) { this.t1.text = s; } glad for at kunne hjælpe :)
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.