Web Application Generator

Labels
AJAX(112) App Studio(7) Apple(1) Application Builder(245) Application Factory(207) ASP.NET(95) ASP.NET 3.5(45) ASP.NET Code Generator(72) ASP.NET Membership(28) Azure(18) Barcode(2) Barcodes(3) BLOB(18) Business Rules(1) Business Rules/Logic(140) BYOD(13) Caching(2) Calendar(5) Charts(29) Cloud(14) Cloud On Time(2) Cloud On Time for Windows 7(2) Code Generator(54) Collaboration(11) command line(1) Conflict Detection(1) Content Management System(12) COT Tools for Excel(26) CRUD(1) Custom Actions(1) Data Aquarium Framework(122) Data Sheet(9) Data Sources(22) Database Lookups(50) Deployment(22) Designer(177) Device(1) DotNetNuke(12) EASE(20) Email(6) Features(101) Firebird(1) Form Builder(14) Globalization and Localization(6) How To(1) Hypermedia(2) Inline Editing(1) Installation(5) JavaScript(20) Kiosk(1) Low Code(3) Mac(1) Many-To-Many(4) Maps(6) Master/Detail(36) Microservices(4) Mobile(63) Mode Builder(3) Model Builder(3) MySQL(10) Native Apps(5) News(18) OAuth(9) OAuth Scopes(1) OAuth2(13) Offline(20) Offline Apps(4) Offline Sync(5) Oracle(11) PKCE(2) Postgre SQL(1) PostgreSQL(2) PWA(2) QR codes(2) Rapid Application Development(5) Reading Pane(2) Release Notes(183) Reports(48) REST(29) RESTful(29) RESTful Workshop(15) RFID tags(1) SaaS(7) Security(81) SharePoint(12) SPA(6) SQL Anywhere(3) SQL Server(26) SSO(1) Stored Procedure(4) Teamwork(15) Tips and Tricks(87) Tools for Excel(2) Touch UI(93) Transactions(5) Tutorials(183) Universal Windows Platform(3) User Interface(338) Video Tutorial(37) Web 2.0(100) Web App Generator(101) Web Application Generator(607) Web Form Builder(40) Web.Config(9) Workflow(28)
Archive
Blog
Web Application Generator
Friday, April 6, 2012PrintSubscribe
Using a Single Template for “editForm1” and “createForm1”

By default, the Products form view editForm1 of Northwind sample shows a vertical list of data fields.

Default 'editForm1' view of 'Products' in sample Code On Time web application

The form view createForm1 is displayed when users create a new record. It also displays a vertical list of fields.

Default 'createForm1' view of 'Products' in sample Code On Time web application

The data fields are exactly the same in both form views.

If you wanted the layout of the fields to be different, then you can develop a custom form template for each view.

If the application workflow does not require a different presentation of data fields when creating new rows or editing existing ones, then you may want to create a single template to customize the presentation of both form views. This will require creation of a base template, and another template that will connect each view to the base template.

Start Code On Time web application generator, click on the project name, and press Design.  In the Designer, switch to the User Controls tab at the top of the page. On the action bar, press New | New User Control. Give this user control the name of “Product_FormTemplateBase”.

New user control 'Product_FormTemplateBase' in Code On Time Designer

Press OK to save the user control. This will take you back to the list of user controls. On the action bar, press New | New User Control again. This user control will have the name of “Product_FormTemplate”.

New user control 'Product_FormTemplate' in Code On Time Designer

Press OK to save, and press Exit on the tool bar to close the Designer. Press Generate to regenerate the application and have the generator create the user controls. The user controls will be created first time only and will not be overwritten during subsequent generation sessions.

When complete, switch back to the generator, click on the Project Name, and press Develop. This will open Visual Studio. Double-click on ~/Controls/ProductFormTemplateBase.ascx. Press Ctrl+K, Ctrl+D to format the document. You will see an UpdatePanel element.

Default User Control markup in Visual Studio

Replace the entire file code with the following sample:

C#:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Product_FormTemplateBase.ascx.cs" 
    Inherits="Controls_Product_FormTemplateBase" %>
<table>
    <tr>
        <td style="vertical-align:top;">
            <div>
                {ProductName}
            </div>
            <div>
                {SupplierID}
            </div>
            <div>
                {CategoryID}
            </div>
            <div>
                {QuantityPerUnit}
            </div>
            <div>
                {UnitPrice}
            </div>
        </td>
        <td style="vertical-align:top;">
            <div>
                {UnitsInStock}
            </div>
            <div>
                {UnitsOnOrder}
            </div>
            <div>
                {ReorderLevel}
            </div>
            <div>
                {Discontinued}
            </div>
        </td>
    </tr>
</table>

Visual Basic:

<%@ Control Language="VB" AutoEventWireup="false" CodeFile="ProductsCustomTemplate.ascx.vb" 
    Inherits="Controls_ProductsCustomTemplate" %>
<table>
    <tr>
        <td style="vertical-align:top;">
            <div>
                {ProductName}
            </div>
            <div>
                {SupplierID}
            </div>
            <div>
                {CategoryID}
            </div>
            <div>
                {QuantityPerUnit}
            </div>
            <div>
                {UnitPrice}
            </div>
        </td>
        <td style="vertical-align:top;">
            <div>
                {UnitsInStock}
            </div>
            <div>
                {UnitsOnOrder}
            </div>
            <div>
                {ReorderLevel}
            </div>
            <div>
                {Discontinued}
            </div>
        </td>
    </tr>
</table>

Comparing the C# and Visual Basic code, you will notice that the only difference between the two files is the @Control header. Make sure to preserve your header when modifying the template.

This template is similar to the custom templates described in custom form template, with one exception. There is no div with id composed of the controller name and view id. Named template div’s will be specified in the second user control.

Open the second user control, Product_FormTemplate.ascx, using the Solution Explorer. Replace the content as follows:

C#:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Product_FormTemplate.ascx.cs" 
    Inherits="Controls_Product_FormTemplate" %>
<%@ Register Src="Product_FormTemplateBase.ascx" TagName="Product_FormTemplateBase" 
    TagPrefix="uc1" %>
<div>
    <div id="Products_createForm1">
        <uc1:Product_FormTemplateBase ID="Product_FormTemplateBase1" 
        runat="server" />
    </div>
    <div id="Products_editForm1">
        <uc1:Product_FormTemplateBase ID="Product_FormTemplateBase2" 
        runat="server" />
    </div>
</div>

Visual Basic:

<%@ Control Language="VB" AutoEventWireup="false" CodeFile="Product_FormTemplate.ascx.vb" Inherits="Controls_Product_FormTemplate" %>
<%@ Register Src="Product_FormTemplateBase.ascx" TagName="Product_FormTemplateBase" 
    TagPrefix="uc1" %>
<div>
    <div id="Products_createForm1">
        <uc1:Product_FormTemplateBase ID="Product_FormTemplateBase1" 
        runat="server" />
    </div>
    <div id="Products_editForm1">
        <uc1:Product_FormTemplateBase ID="Product_FormTemplateBase2" 
        runat="server" />
    </div>
</div>

In the bottom left corner of the editor, click on Design button. You will see two instances of the same base template.

User Control base template displayed in two instances of view-specific templates
Both editForm1 and createForm1 are referring to the same Product_FormTemplateBase.ascx file, and thus will both have the same custom layout.
There is one more step to do in Visual Studio. Switch back to Source mode. In the surrounding div, add the style rule that will hide the template on the page at runtime:
<div style="display:none">
    <div id="Products_createForm1">
        <uc1:Product_FormTemplateBase ID="Product_FormTemplateBase1" 
        runat="server" />
    </div>
    <div id="Products_editForm1">
        <uc1:Product_FormTemplateBase ID="Product_FormTemplateBase2" 
        runat="server" />
    </div>
</div>
Save the file. The template is ready to be used on the application pages. 
Go back to the web application generator. Click on the project name, and press Design. Right-click on Categories / Products / container1 node, and select New Control in the context menu. For the User Control field, select Product_FormTemplate, and press OK to save the control.
Add new control to Products page
On the toolbar, press Browse to have the application generated and started in your default web browser. 
Navigate to the Products page, and select any product. You will see that the editForm1 is now using the custom template.
View 'editForm1' using the new custom template in Code On Time web application

Press Cancel to leave the record, and press New Products to go to createForm1. You will see that this view is also using the same custom template.

View 'createForm1' using the new custom template in Code On Time web application

Wednesday, April 4, 2012PrintSubscribe
Applying a Form Template to Multiple Pages

Now that you have a custom form template in your application, you may want to apply this template to multiple pages. The Products page below uses the standard vertical list of fields.

Default layout of 'editForm1' on Products page of Code On Time generated web application

Start the web application generator, click on the project name, and press Design. In the Project Explorer, right-click on Categories / Products / container1, and press New Control.

New Control option in Code On Time Project Explorer

For the User Control property, choose “ProductsCustomTemplate”.

New Control with User Control of 'ProductsCustomTemplate' in Code On Time Project Designer

Press OK to save the page control. Press Browse button on the Designer tool bar. When the browser window comes up, navigate to Products page and select a product. You will see that the custom template is now being used to render the form.

Products page 'editForm1' using a custom form template

If you create a new product, you will see the createForm1 custom layout.

Products page 'createForm1' using a custom form template

Another place that we would like to use the custom template in is the Suppliers page. Navigate to this page in the web application, and select a supplier. You will see a list of products appear underneath the selected supplier. Click on the New Products button, and a modal window will open showing the default createForm1 layout.

 Default 'createForm1' in modal window on Suppliers page of web application created with Code On Time

Switch back to the web app generator, and right-click on Region / Suppliers / container1. Select New Control.

'New Control' option in Code On Time Explorer

In the User Control field, select “ProductsCustomTemplate”.

New Control with User Control of 'ProductsCustomTemplate' in Code On Time Designer

Press OK to save the control, and press Browse to regenerate the web application. Navigate to the Suppliers page, select a supplier, and press New Products again.

Custom Template in 'createForm1' in modal window on Suppliers page of web application created with Code On Time

If you edit a product linked to a supplier, you will see the following custom template:

Custom Template in 'editForm1' in modal window on Suppliers page of web application created with Code On Time

Wednesday, April 4, 2012PrintSubscribe
Form-Level Templates

By default, Code On Time web application generator creates a vertical list of fields for all form views, such as the one for Products table in Northwind sample database, shown below.

Baseline editForm1 of Products controller in Code On Time web application

Let’s create a custom template for the Products’ createForm1 and editForm1 views.

Starting from a fresh Web Site Factory application created from Northwind sample database, click on the project name in the generator and press Design. In the Project Explorer, right click on the Home page and press New Page.

New Page option in Code On Time Designer

Give this page the following settings:

Property Value
Name ProductsForm
Index 1005
Title Products Form
Path Products Form
Description This is the products management screen.
Style Miscellaneous
About This Page This is the products management screen.
Roles N/A

New 'ProductsForm' page in Code On Time Designer

Press OK to save the page. Add a container to this page. In the Project Explorer, right-click on the Products Form page and select New Container.

'New Container' option in Code On Time Designer

Leave the default settings and press OK to save the new container.

Next, right-click on the container and select New Data View.

'New Data View' option in Code On Time Designer

Give this data view the following settings:

Property Value
Controller Products
View grid1

New 'Products' Data View being added to Products Form page in Code On Time designer

Press OK to save the data view.

Right-click on c100 container again, and press New Control.

For the User Control field, click the New User Control button to the right of the field. Give the user control the name of “ProductsCustomTemplate”.

New 'ProductsCustomTemplate' user control in Code On Time Designer

Press OK to create the new user control. The reference to the new user control will be recorded in the User Control property of the page control.

'ProductsCustomTemplate' control added to Products Form page in Code On Time Designer

Press OK again to save the control.

Exit the Designer, and regenerate the application so that the user control is created. Go back to the web application generator, select the project name, and press Develop to open the project in Visual Studio.

In the Solution Explorer, open the ~/Controls/ProductsCustomTemplate.ascx file. Press Ctrl+K, Ctrl+D to format the document.

Default User Control opened in Microsoft Visual Studio

You will see that the file contains an UpdatePanel with some filler text in a div element. We will want to replace the UpdatePanel with a div of id “Products_editForm1”. This will prompt the application to use the field layout in the editForm1 of Products. To specify the formatting of the fields, insert each field name surrounded by {} – the application will replace the placeholders with the fields at runtime.

Notice that the div element Products_editForm1 has the “display:none” CSS attribute. If this attribute is not present, then the template will display alongside your data form as text.

To start, let’s put all the fields in their own div element in sequential order. Copy the following code:

C#:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="ProductFormTemplate.ascx.cs" 
    Inherits="Controls_ProductFormTemplate" %>
<div id="Products_editForm1" style="display:none;">
    <div>
        {ProductName}
    </div>
    <div>
        {SupplierID}
    </div>
    <div>
        {CategoryID}
    </div>
    <div>
        {UnitPrice}
    </div>
    <div>
        {QuantityPerUnit}
    </div>
    <div>
        {UnitsInStock}
    </div>
    <div>
        {UnitsOnOrder}
    </div>
    <div>
        {ReorderLevel}
    </div>
    <div>
        {Discontinued}
    </div>
</div>

Visual Basic:

<%@ Control Language="VB" AutoEventWireup="false" CodeFile="ProductsCustomTemplate.ascx.vb" 
    Inherits="Controls_ProductsCustomTemplate" %>
<div id="Products_editForm1" style="display:none;">
    <div>
        {ProductName}
    </div>
    <div>
        {SupplierID}
    </div>
    <div>
        {CategoryID}
    </div>
    <div>
        {UnitPrice}
    </div>
    <div>
        {QuantityPerUnit}
    </div>
    <div>
        {UnitsInStock}
    </div>
    <div>
        {UnitsOnOrder}
    </div>
    <div>
        {ReorderLevel}
    </div>
    <div>
        {Discontinued}
    </div>
</div>

Comparing the C# and Visual Basic code, you can see that the only difference is the @Control. Make sure to preserve your original header that matches the programming language of your project.

Save this file and run the web application. Navigate to the Products Form, and select a product. You will see the fields are displayed in a vertical list with the labels above the data, instead of being on the left.

Fields displayed in vertical list with labels above the data using custom layout in Code On Time web application

Organize these fields into three columns, using a table. The fields will be aligned to the top, and there will be grey dividing lines to help us lay out the page. Copy the following layout into your template:

<div id="Products_editForm1" style="display: none;">
    <table>
        <tr>
            <td>
                <div>
                    {ProductName}
                </div>
                <div>
                    {SupplierID}
                </div>
                <div>
                    {CategoryID}
                </div>
                <div>
                    {UnitPrice}
                </div>
            </td>
            <td style="vertical-align: top; border-left: solid 1px grey;">
                <div>
                    {QuantityPerUnit}
                </div>
                <div>
                    {UnitsInStock}
                </div>
            </td>
            <td style="vertical-align: top; border-left: solid 1px grey;">
                <div>
                    {UnitsOnOrder}
                </div>
                <div>
                    {ReorderLevel}
                </div>
                <div>
                    {Discontinued}
                </div>
            </td>
        </tr>
    </table>
</div>

Save, and refresh the page. You will see that the changed layout works as expected.

Fields displayed in three columns using custom layout in Code On Time web application

Let’s emphasize the Product Name by increasing the size of the text and making it bold. Add the following styling to the div element containing {ProductName} field.

style="font-weight:bold;font-size:18px;"

Save the user control file, refresh the page, and select a product to see the changes.

Product Name field enlarged in Code On Time web application

Let’s change the fields in the third column so that they float. Add the following class to the div elements wrapping the field placeholders in the third column:

class="FieldPlaceholder"

Refresh the page, and you will see that the three fields on the right are now floating.

Floating fields in custom layout in Code On Time web application

Let’s use our own labels for Quantity Per Unit and Units In Stock. Let’s add the classes FieldPlaceholder and DataOnly to have them float and hide the default labels, respectively. We’ll add more div elements containing the replacement labels, and add some margin. Replace the second column with the following HTML:

<td style="vertical-align: top; border-left: solid 1px grey;">
    <div>
        Quantity:
    </div>
    <div style="margin:4px;" class="FieldPlaceholder DataOnly">
        {QuantityPerUnit}
    </div>
    <div>
        Stock:
    </div>
    <div style="margin:4px;" class="FieldPlaceholder DataOnly">
        {UnitsInStock}
    </div>
</td>

Save the file, refresh the page, and select a product.

Center column modified in custom layout of Code On Time web app

Now the fields in the center column have custom labels.

Press Edit to enter edit mode for the product. You will see that despite all the changes to the layout and fields, the page still retains full functionality—lookups still work, Discontinued is still a drop down, and all fields act accordingly.

Custom layout for Products in Code On Time web application

When you create a new product, you will see that the default form layout is not affected by the new template.

Default 'createForm1' for Products in Code On Time web application

Let's create a custom layout for createForm1 as well.  This layout is the same as editForm1, except we changed up the order of the columns and added a large label to the top of createForm1. To have the layout applied to createForm1, change the div id to “Products_createForm1”. Add this code to the bottom of your current template:

<div id="Products_createForm1" style="display: none;">
    <h1>
        createForm1</h1>
    <table>
        <tr>
            <td style="vertical-align: top;">
                <div class="FieldPlaceholder">
                    {UnitsOnOrder}
                </div>
                <div class="FieldPlaceholder">
                    {ReorderLevel}
                </div>
                <div class="FieldPlaceholder">
                    {Discontinued}
                </div>
            </td>
            <td style="vertical-align: top; border-left: solid 1px grey;">
                <div>
                    Quantity:
                </div>
                <div style="margin: 4px;" class="FieldPlaceholder DataOnly">
                    {QuantityPerUnit}
                </div>
                <div>
                    Stock:
                </div>
                <div style="margin: 4px;" class="FieldPlaceholder DataOnly">
                    {UnitsInStock}
                </div>
            </td>
            <td style="vertical-align: top; border-left: solid 1px grey;">
                <div style="font-weight: bold; font-size: 18px;">
                    {ProductName}
                </div>
                <div>
                    {SupplierID}
                </div>
                <div>
                    {CategoryID}
                </div>
                <div>
                    {UnitPrice}
                </div>
            </td>
        </tr>
    </table>
</div>

Save the file, refresh the application, and create a new Product.

Altered 'createForm1' custom layout in Code On Time web application

You will see large text saying “createForm1” at the top of the form, and the columns have been rearranged.

Enter sample data into the required fields, and press OK to save. Select the new record, and you will see that the original editForm1 layout will be used.

Custom Layout for 'editForm1' of Products shown in Code On Time web application