Just nu i M3-nätverket
Jump to content

Hjälp med user control


Mr Orange

Recommended Posts

Hej!

 

Jag har gjort en user control som ser ut så här:

 

Adress.ascx

-----------

<%@ Control Language="vb" %>

 

<TABLE id="tableAddress" cellSpacing="1" cellPadding="1" width="100%" border="0" align="center">

<tr>

<TD><asp:label id="lblNamn" runat="server">Namn:</asp:label><BR>

<asp:textbox id="txtNamn" runat="server" Columns="25"></asp:textbox>

</td>

</tr>

<tr>

<TD><asp:label id="lblAdress" runat="server">Adress:</asp:label><BR>

<asp:textbox id="txtAdress" runat="server" Columns="25"></asp:textbox></TD>

</TR>

<TR>

<TD><asp:label id="lbPostnummer" runat="server">Postnummer:</asp:label><BR>

<asp:textbox id="txtPostnummer" runat="server" Columns="25"></asp:textbox></td>

</tr>

<tr>

<TD><asp:label id="lblOrt" runat="server">Ort:</asp:label><BR>

<asp:textbox id="txtOrt" runat="server" Columns="25"></asp:textbox></TD>

</TR>

</TABLE>

 

Sedan har jag gjort en hänvisning till den i min aspx sida:

 

start.aspx

----------

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

<html>

<body>

 

<form runat="server>

<P align="center"><uc1:Address id="Address1" runat="server"></uc1:address>

/form>

 

</html>

</body>

 

Om jag nu vill fylla textrutorna med information hur gör jag då?

 

Skulle man kunna lägga till en koppling mot en databas så att det visas olika resultat beroende på vilket id värde man t.ex klickade på?

 

 

 

Link to comment
Share on other sites

Jag är inte helt säker på vad du vill göra eller framför allt när du vill göra det.

 

Det finns ett antal sätt att lösa ditt problem, det beror bara på hur du vill ha det hela.

 

Om du vill sätta vissa värden när du laddar in kontroller kan du till exempel använda dig av Properties som du deklarerar publika i din user control. På så sätt så kan du skicka med värderna direkt när du skapar kontrollen.

 

Om du i din codebehind (Adress.ascx.cs t.ex.) så skulle du kunna skriva nått i stil med:

 

public string Namn {

get {

return lblNamn.Text;

}

set {

lblNamn.Text = value; // value är inargumentet

}

}

 

Då kan du göra i din .aspx följande:

 

<uc1:Address id="Address1" runat="server" Namn="Olle"></uc1:Address>

 

Då kommer det att stå Olle på den Labeln.

 

Detta kan naturligtvis sättas i Codebehind filen för din .aspx fil oxå.

 

 

Ett annat sätt är att skapa en metod i din UC som du skickar data till. Blir ungefär samma sak, men kan vara bra om det är mycket data eller data som skall formateras på ett visst sätt. Det är ju även en bra idé om du skulle vilja skicka in ett index nummer för att sedan göra en databasförfråga där du använder resultatet för att fylla i värden i din UC. Det alltså inga problem att koppla upp sig mot databasen i själva kontrollen.

 

Hoppas det hjälpte och säg till om det är nått du undrar över... :)

Ante

 

Link to comment
Share on other sites

Om jag lägger allt i en codebehind liknande:

 

public string Namn {

get {

return txtNamn.Text;

}

set {

txtNamn.Text = value; // value är inargumentet

}

}

 

Måste jag då deklarera textboxen?

 

ex)

public System.Web.UI.WebControls.TextBox txtNamn

 

 

 

 

Link to comment
Share on other sites

Jo, ligger det i en Codebehind så kan det vara på sin plats med en sådan definition. Annars du inget att gå på.

 

Men den bör inte deklareras public. Protected eller private är bättre val. Kanske helst protected eftersom du då kan ärva från kontrollen på ett bra sätt :)

 

Link to comment
Share on other sites

Tack för tipset!

 

Vad är skillnaden mellan att skriva

 

Protected WithEvents txtNamn As System.Web.UI.WebControls.TextBox

 

och

 

Protected System.Web.UI.WebControls.TextBox txtNamn?

 

[inlägget ändrat 2003-04-16 17:11:41 av Mr Orange]

Link to comment
Share on other sites

Det är en skillnad i språk

 

Så här skriver man det i VB.NET

Protected WithEvents txtNamn As System.Web.UI.WebControls.TextBox

 

Så här skriver man i C#

protected System.Web.UI.WebControls.TextBox txtNamn?

Observera att jag ändrade Protected till protected. C# gör skilnad på små och stora bokstäver på ett annat sätt än VB.NET.

Det finns ingen motsvarighet till WithEvents i C# utan där får man själv skapa en 'delegate' som man binder till sitt objekt. Det är dock inte nödvändigt i detta fall eftersom TextBox redan har stöd "event-handlers" så det är bara att binda rätt eventhandlers till objektet

 

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...