Zusammengesetzte Steuerelemente (User Controls)
Zu Abschnitt 6.6.1 des Buchs
Dieses Beispiel zeigt, wie man mehrere Steuerelemente zu einem neuen
Steuerelement zusammensetzen kann. Die Steuerelemente werden zunächst
in einer ascx-Datei definiert:
../../samples/6/MoneyField.ascx
<%@ Control Inherits="MoneyFieldBase" Src="MoneyField.ascx.cs" %>
<asp:TextBox ID="amount" Runat="server" />
<asp:DropDownList ID="currency" AutoPostBack="true"
OnSelectedIndexChanged="Select" Runat="server">
<asp:ListItem Text="Euro" Value="1.0" Selected="true" />
<asp:ListItem Text="Dollar" Value="0.88" />
<asp:ListItem Text="Franken" Value="1.47" />
<asp:ListItem Text="Pfund" Value="0.62" />
</asp:DropDownList>
|
Die Ablauflogik dieser Steuerelemente steckt in einer Hintergrunddatei:
../../samples/6/MoneyField.ascx.cs
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Globalization;
public class MoneyFieldBase : UserControl {
protected TextBox amount;
protected DropDownList currency;
private CultureInfo culture = new CultureInfo("en-US");
public string Text {
get { return amount.Text; }
set { amount.Text = value; }
}
public double OldFactor {
get {return ViewState["factor"] == null ? 1 : (double)ViewState["factor"];}
set {ViewState["factor"] = value; }
}
public void Select(object sender, EventArgs arg) {
try {
double val = Convert.ToDouble(amount.Text, culture);
double newFactor = Convert.ToDouble(currency.SelectedItem.Value, culture);
double newVal = val / OldFactor * newFactor;
amount.Text = newVal.ToString("f2", culture);
OldFactor = newFactor;
} catch (Exception) {
amount.Text = "0";
}
}
}
|
Schließlich kann das neue zusammengesetzte Steuerelement ein- oder
mehrmals in einer aspx-Seite verwendet werden:
../../samples/6/MoneyField.aspx
<%@ Page Language="C#" %>
<%@ Register TagPrefix="my" TagName="MoneyField" Src="MoneyField.ascx" %>
<html>
<body>
<form Runat="server">
Betrag 1: <my:MoneyField ID="field1" Text="100" Runat="server" /><br>
Betrag 2: <my:MoneyField ID="field2" Runat="server" />
</form>
</body>
</html>
|
Ausführung
http://dotnet.jku.at/book/samples/6/MoneyField.aspx
Ergebnis
|