Avatar billede anders159 Nybegynder
26. oktober 2005 - 12:00 Der 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" %>

<%@ Register Src="myControl.ascx" TagName="myControl" TagPrefix="uc1" %>

<html>
<head runat="server">
    <title>MyTestPage</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <table >
        <asp:Repeater id=Repeater1 runat="server">
            <HeaderTemplate>
            </HeaderTemplate>
           
           
            <ItemTemplate>       
              <uc1:myControl ID="MyControl1" runat="server" />
            </ItemTemplate>         
           
            <FooterTemplate>
            </FooterTemplate>       
        </asp:Repeater>
         
    </table>     
    </div>
       
    </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");
       
        values.Add(uc);
        values.Add(uc);   
       
        Repeater1.DataSource = values;
        Repeater1.DataBind();

    }
}

----------------------------------------------------------------
myControl.ascx-->
<%@ Control Language="C#" Inherits="myClass.person" AutoEventWireup="false" %>

<table>
<tr>
  <td>
  ><asp:textbox ID="t1" runat="server" />
  </td>
</tr>
</table>

---------------------------------------------------------
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 ;)
Avatar billede anders159 Nybegynder
26. oktober 2005 - 12:02 #1
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å :)
Avatar billede iblarsen Praktikant
26. oktober 2005 - 12:18 #2
Du kan lægge din UserControls ind ved at holde dem i en placeholder (asp:placeholder) på din aspx side.
Avatar billede iblarsen Praktikant
26. oktober 2005 - 12:18 #3
Hvis du vil holde fast på placeringen af din placeholder. Så pak den ind i en <div>
Avatar billede dr_chaos Nybegynder
26. oktober 2005 - 12:31 #4
skal du have vist mange instanser af usercontrollen på din side ?
Avatar billede dr_chaos Nybegynder
26. oktober 2005 - 12:31 #5
og hvad er formålet med usercontrollen ?
Avatar billede anders159 Nybegynder
26. oktober 2005 - 12:44 #6
Yes Der.. Hej chaos. :)

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..
Avatar billede dr_chaos Nybegynder
26. oktober 2005 - 12:47 #7
ok skal du sætte værdierne i tekstboksen i repeateren ?
Avatar billede anders159 Nybegynder
26. oktober 2005 - 12:51 #8
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.
Avatar billede dr_chaos Nybegynder
26. oktober 2005 - 12:53 #9
prøv lige at sende mig din kilde kode på nic@jee.dk
Avatar billede anders159 Nybegynder
26. oktober 2005 - 12:56 #10
øhhh så undskylder jeg lige min uvidenhed;)

er ikke helt med..alt den kode jeg har er oven for..men vil meget gerne sende det...er dog bare ikke lige helt sikker på hvad du mener med kildekoden

Er det bare de forskellige file jeg har i mit project??
Eller hele projectet??
Avatar billede dr_chaos Nybegynder
26. oktober 2005 - 12:59 #11
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 ?
Avatar billede anders159 Nybegynder
26. oktober 2005 - 13:01 #12
ok..men har lige sendt den ;)

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'
Avatar billede dr_chaos Nybegynder
26. oktober 2005 - 13:41 #13
er det faste felter som skal være i din repeater ?
Avatar billede dr_chaos Nybegynder
26. oktober 2005 - 13:43 #14
fordi den måde du er ved at bygge tingene op på svarer til at skyde sig selv i foden.
Avatar billede dr_chaos Nybegynder
26. oktober 2005 - 13:52 #15
mht faste felter mener jeg skal der være et navn textfelt og andre felter ?
Avatar billede anders159 Nybegynder
26. oktober 2005 - 14:00 #16
hehehe. Ja det kan vi jo ikke ha ;)

Ved ikke helt hvad du mener med faste felter i repeater.

hvis vi følger dette eks, vil jeg gerne kunne oprette 2 usercontrols på aspx.cs. Derefter sætte uc1.setValue ="name1" og uc2.setValue = "name2"

derefter får vist  begge mine textboxe på aspx siden, og helst med resultatet "navn1" og "navn2" ;)

Håber du kan genneskue hvad jeg mener.
Avatar billede anders159 Nybegynder
26. oktober 2005 - 14:02 #17
alt dette skal dog kunne foregå dynamisk, da jeg aldrig ved om der er tale om 1,2,3eller4 controls.
Avatar billede dr_chaos Nybegynder
26. oktober 2005 - 14:05 #18
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.
Avatar billede anders159 Nybegynder
26. oktober 2005 - 14:17 #19
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?
Avatar billede anders159 Nybegynder
26. oktober 2005 - 14:19 #20
skal jeg have min kode i myControl.ascx.cs istedet for i myClass.cs, eller vil det intet ændre?
Avatar billede dr_chaos Nybegynder
26. oktober 2005 - 14:27 #21
jeg har lavet noget nyt kode til dig hvor du benytter myclass.cs
men ingen user control.
Avatar billede dr_chaos Nybegynder
26. oktober 2005 - 14:28 #22
default.aspx
<%@ Page Language="C#" Debug="true" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<html>
<head runat="server" ID="Head1">
    <title>MyTestPage</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Repeater id=Repeater1 runat="server">
            <HeaderTemplate>
            </HeaderTemplate>
           
           
            <ItemTemplate>
            Navn:<br>
                    <asp:Label ID="ff" Runat="server"><%# DataBinder.Eval(Container.DataItem,"Name") %></asp:Label>
                    <br>
          Alder:<br>
            <asp:TextBox ID="t1" Runat="server" Value='<%# DataBinder.Eval(Container.DataItem,"Age") %>'></asp:TextBox>
            </ItemTemplate>         
           
            <FooterTemplate>
            </FooterTemplate> 
            <SeparatorTemplate>
          <hr>
            </SeparatorTemplate>     
        </asp:Repeater>
   
   
    </div>
     
     
       
    </form>
</body>
</html>
Avatar billede dr_chaos Nybegynder
26. oktober 2005 - 14:29 #23
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
    }
Avatar billede dr_chaos Nybegynder
26. oktober 2005 - 14:29 #24
using System;
using System.Data;
using System.Data.OleDb;
using System.Text;
using System.Text.RegularExpressions;
using System.Web.UI.WebControls;


    public class person
    {
        string name;
        int age;
        public person(string name, int age)
        {
            Name = name;
            Age = age;
        }

       
        public string Name
        {
            get{return name;}
            set{name = value;}
        }
        public int Age
        {
            get{return age;}
            set{age = value;}
        }
    }
Avatar billede anders159 Nybegynder
26. oktober 2005 - 14:40 #25
Hej Chaos

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.
Avatar billede dr_chaos Nybegynder
26. oktober 2005 - 14:51 #26
så skal du lave en placeholder på din forside.
Avatar billede anders159 Nybegynder
26. oktober 2005 - 14:56 #27
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;)
Avatar billede dr_chaos Nybegynder
26. oktober 2005 - 14:57 #28
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
   
}



default.aspx:
<%@ Page language="c#" Codebehind="Default.aspx.cs" AutoEventWireup="false" Inherits="_Default" %>


<html>
<head runat="server" ID="Head1">
    <title>MyTestPage</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>

      <asp:PlaceHolder ID="plc" Runat="server"></asp:PlaceHolder>
    </div>
     
   
       
    </form>
</body>
</html>
Avatar billede dr_chaos Nybegynder
26. oktober 2005 - 15:00 #29
jeg skal hjem fra arbejde nu men er på om en time.
Hvis du ikke kan få det jeg har lavet til at virke så bare skriv.
Avatar billede anders159 Nybegynder
26. oktober 2005 - 15:53 #30
YES :) så kom der hul igennem

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;
}

Kan man så gøre noget aller dette?

    public class _Default : System.Web.UI.Page
    {
        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");
                uc.setTextBoxValue("TextBox nummer "+i);
                plc.Controls.Add(uc);
               
            }
       

        }

}
--------------------------------------

Dette ville være det ultimative, for den problemstilling jeg sidder med.



du behøver ikke bruge mere tid på det hvis du ikke lige har løsningen i baghånden;)
Du har allerede været en STOR hjælp.så smid et svar.....din haj;)
Avatar billede dr_chaos Nybegynder
26. oktober 2005 - 16:00 #31
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 :)
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