Home   Cover Cover Cover Cover
 

User Controls


From Section 6.6.1 of the book

This example shows how a User Control can be built from several web controls. First of all, the web controls that should be combined are defined in an ascx file:

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="US Dollar" Value="1.1489" />
  <asp:ListItem Text="Swiss Franc" Value="1.5725" />
  <asp:ListItem Text="British Pound" Value="0.6873" />
</asp:DropDownList>

The script code for these web controls is implemented in a code-behind file:

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

Now the new User Control can be used one or several times on an aspx page:

MoneyField.aspx
<%@ Page Language="C#" %>
<%@ Register TagPrefix="my" TagName="MoneyField" Src="MoneyField.ascx" %>
<html>
<body>
  <form Runat="server">
    Amount 1: <my:MoneyField ID="field1" Text="100" Runat="server" /><br>
    Amount 2: <my:MoneyField ID="field2" Runat="server" />
  </form>
</body>
</html>

Try it

   http://dotnet.jku.at/book/samples/6/MoneyField.aspx