User Interface

Labels
AJAX(112) App Studio(8) 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(184) 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
User Interface
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

Saturday, March 31, 2012PrintSubscribe
Creating Static Lookup Items

In the Products table of Northwind sample database, there is a Reorder Level field. It is rendered as a textbox where users can type in any number to trigger the product reorder. If you look at the available filtering options of the Reorder Level field, you can see that there is a limited number of values stored in the database (0, 5, 10, 15, 20, 25, and 30).

Reorder Level field in Products screen presented as a textbox

Let’s change this field into a static dropdown list, and have the values displayed as words instead of numbers. For example, “0” will be Zero, “5” will be Five, and so on.

Open the web application generator, select the project name, and select Design. Switch to the Controllers tab in the Project Explorer, and double-click on Products / Fields / Reorder Level node. Change Items Style of Reorder Level field to “Drop Down List”, and press OK to save the field.

Reorder Level field changed to Items Style of 'Drop Down List'

Scroll to the top of the Designer, and click on the Items tab. On the action bar, select New | New Item.

Each item represents an option available in the dropdown list. The Value is stored in the database, while the Text is displayed to the user.

Enter the following values:

Value Text
0 Zero

New Item of '0' for Reorder Level field

Press OK to save the item. Using the same method, create more items with the following values:

Value Text
5 Five
10 Ten
15 Fifteen
20 Twenty
25 Twenty-five
30 Thirty

Static list of lookup items for Reorder Level field

In the top left corner, press Generate to generate the web app. A Preview window will open. Navigate to Products page, and you will see that the Reorder Level is now displayed with words. Edit a record, and the Reorder Level is now a static dropdown lookup.

Reorder Level field presented as a drop down list with words

The adaptive filter in the Reorder Level column also reflects the static values.

Drop Down options for Reorder Level with static items

On the action bar, select Report | PDF Document. You will see that Reorder Level displays the Text, and not the Value of the field.

PDF Report of Products displaying text in Reorder Level field

Saturday, March 31, 2012PrintSubscribe
Data View Refresh Interval

Certain types of applications require automatic refreshing of data presented on screen at predefined intervals. For example, applications supporting various surveillance and monitoring activities must pro-actively update the contents of the user interface screens.

Web browsers can be instructed to reload the fresh copy of the page from the server. Unfortunately the page flickering will be quite irritating if one has to stare at an application screen for a few hours every day.

Code On Time web applications offer smooth partial page refresh when users interact with the page.

For example, a data view can be refreshed without causing the entire page to reload if you click on the Refresh icon in bottom right corner of a grid view.

Data view refresh can be manually activated by clicking on the 'Refresh' icon in the bottom right corner of a grid view

A data view can also refresh itself if a user is not interacting with it for awhile.

Open your project in Designer and activate the properties of the data view on the page.

Master data view on the 'Products' page displayed in the Project Explorer

Set property Refresh Interval to 30. The duration of the interval is expressed in seconds.

Data view property 'Refresh Interval' displayed in Project Designer

Save the data view properties and generate your application. Navigate to the page and observe that the Refresh icon is briefly replaced with the progress indicator every 30 seconds.

Data view refresh is in progress as indicated by the 'wait' icon displayed in place of the 'Refresh' button in the bottom right corner of the grid view

If you actively interact with the data view, then the refresh interval is always restarted from the moment of the last interaction.