Lecture - Advanced - User Control Arrays


 

User Control Arrays

 

Prerequisites

 

Lecture - Form Objects - User Controls

 

Summary

 

Demonstrates how to create a complex user control and then use it as a control array inside of another user control. Very useful coding pattern for handling forms with patterns.

 

Video 

 

http://online1.daytonastate.edu/player2.php?id=339a18def9898dd60a634b2ad8fbbd58 

 

Reference Materials

 

The user control that represents a single line in the form is ucStaffResponseTime. The Control Array is part of the container control which is ucTraumaResponseTimes. This user control is then placed on pages as needed.

 

 

ucStaffResponseTime.ascs
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ucStaffResponseTime.ascx.cs" Inherits="TraumaFlow.UserControls.ucStaffResponseTime" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
    <tr>
    <td class="TableLeft"><asp:Label ID="lblJob" runat="server" Text=""></asp:Label></td>
    <td class="TableRight"><asp:TextBox ID="tbStaff" runat="server" Width="300"></asp:TextBox>
    <cc1:AutoCompleteExtender ID="aceStaff" runat="server" 
                            TargetControlID="tbStaff"                            
                            ServiceMethod="names" 
                            MinimumPrefixLength="1" >                            
    </cc1:AutoCompleteExtender>
    </td>
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
    <td>@<asp:TextBox ID="tbTime" runat="server" Width="75"></asp:TextBox>
    <asp:Button ID="btnNow" runat="server" Text="Now" onclick="btnNow_Click"></asp:Button></td>
    </ContentTemplate>
    </asp:UpdatePanel>
    </tr> 
 
ucStaffResponseTime.ascx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using TraumaFlow.WebServices;
using TraumaFlow.Code;
namespace TraumaFlow.UserControls
{
    public partial class ucStaffResponseTime : System.Web.UI.UserControl
    {
        public int TraumaFormID()
        {
            if (Session["TraumaFormID"] == null)
                return 0;
            else
                return Convert.ToInt32(Session["TraumaFormID"]);
        }
        public string StaffName
        {
            get { return tbStaff.Text; }
            set { tbStaff.Text = value; }
        }
        public string Label
        {
            get { return lblJob.Text; }
            set { lblJob.Text = value; }
        }
        public string Time
        {
            get { return tbTime.Text; }
            set { tbTime.Text = value; }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
        }
        protected void btnNow_Click(object sender, EventArgs e)
        {
            tbTime.Text = string.Format("{0:HH:mm}", DateTime.Now);
            if (StaffName != String.Empty)
            {
                // Data is Saved as Role;Name;Time
                string s = this.ID;
                s += ";" + StaffName + ";" + Time;
                TraumaFlowHelper.updateMedicalData(TraumaFormID(), "TraumaCallStaffAndResponseTime", s);
            }
        }
        [System.Web.Services.WebMethodAttribute(), System.Web.Script.Services.ScriptMethod()]
        public static string[] names(string pattern)
        {
            FormServices fs = new FormServices();
            return fs.StaffNames(pattern);
            }
    }
} 
 
ucTraumaResponseTime.ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ucTraumaResponseTimes.ascx.cs" Inherits="TraumaFlow.UserControls.ucTraumaResponseTimes" %>    
    <div class="TraumaResponseControls">
    <table>
        <asp:PlaceHolder ID="ph1" runat="server"></asp:PlaceHolder>
    </table>
    </div>
    <asp:Button ID="btnSubmit" runat="server" Text="Submit Times" 
        onclick="btnSubmit_Click" /> 
 
ucTraumaResponseTime.ascx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using TraumaFlow.Code;
namespace TraumaFlow.UserControls
{
    public partial class ucTraumaResponseTimes : System.Web.UI.UserControl
    {
        private ucStaffResponseTime[] staffControls;
        public int TraumaFormID()
        {
            if (Session["TraumaFormID"] == null)
                return 0;
            else
                return Convert.ToInt32(Session["TraumaFormID"]);
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            staffControls = new ucStaffResponseTime[30];
            int i = 1;
            foreach (string s in TraumaFlowHelper.traumaTeamMembers())
            {
                string s2 = s.Replace('_', ' ');
                staffControls[i] = (ucStaffResponseTime)LoadControl("~/UserControls/ucStaffResponseTime.ascx");
                staffControls[i].Label = s2;
                staffControls[i].ID = s;
                ph1.Controls.Add(staffControls[i]);
                i++;
            }
        }
        protected void btnSubmit_Click(object sender, EventArgs e)
        {
            foreach (ucStaffResponseTime u in ph1.Controls)
            {
                if (u.StaffName != String.Empty)
                {
                    // Data is Saved as Role;Name;Time
                    string s = u.ID;
                    s += ";" + u.StaffName + ";" + u.Time;
                    TraumaFlowHelper.updateMedicalData(TraumaFormID(), "TraumaCallStaffAndResponseTime", s);
                }
            }
        }
    }
} 
 

 

Additional Information

 

This video is part of Case Study - Trauma Flow Database

 

http://msdn.microsoft.com/en-us/library/y6wb1a0e.aspx

 

COP 4834 Lectures Page