Home   Cover Cover Cover Cover
 

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