Blog: Posts from April, 2012

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
Posts from April, 2012
Saturday, April 7, 2012PrintSubscribe
Custom Grid Templates

When you select or edit a record in the grid view of Employees in a Northwind sample application, it will display the data fields in their respective columns.

Default 'grid1' view template for Employees in Code On Time web application

You can change the layout of form views using custom form templates. Custom templates can also be applied to the grid view, in order to rearrange the layout of the selected row.

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

New User Control 'Employees_GridTemplate' in Code On Time Designer

Press OK to save the new user control.

Let’s apply this user control to the Employees page. In the Project Explorer, right-click on Employees / container1, and press New Control. In the User Control property, select “Employees_GridTemplate”.

New Control 'Employees_GridTemplate' for Employees page in Code On Time web application designer

Press OK to save the control.

Let’s add the Photo and Notes data fields to the grid for use with the custom template. Right-click on Employees / container1 / view1 / grid1, and press New Data Field. Use the following settings:

Property Value
Field Name Photo
Read Only Yes
The field is hidden True

Press OK to save the data field. Create another data field, with the following settings:

Property Value
Field Name Notes
The field is hidden True

Press OK to save.

Let’s change the column and row properties of the data fields to better fit the grid layout when in inline edit mode. Right-click on Employees / container1 / view1 / grid1, and select Show All Data Fields. Make the following changes:

Field Name Cols Rows
LastName 15  
FirstName 10  
Title 30  
TitleofCourtesy 4  
BirthDate 10  
HireDate 10  
Address 30  
City 15  
Region 4  
PostalCode 10  
Notes 40 5

Data Fields with optimized sizes in Code On Time Designer

On the toolbar, press Exit, and press Generate to create the user control and regenerate the web application.

When complete, switch back to the web app generator, click on the project name, and press Develop. This will open the project in Visual Studio. In the Solution Explorer, double-click on ~/Controls/Employees_GridTemplate.ascx.

Press Ctrl+K, Ctrl+D to format the document.

Make sure to preserve the @Control header that matches your programming language.

Replace the UpdatePanel element with the following markup:

<div style="display: none;">
    <div id="Employees_grid1">
        <table>
            <tr>
                <td style="vertical-align:top;margin-top:10px;">
                    <div class="FieldPlaceholder DataOnly" style="width: 90px; height: 70px; 
                        margin-right: 5px;">
                        {Photo}</div>
                </td>
                <td style="vertical-align: top;">
                    <div class="FieldPlaceholder DataOnly" style="margin-top: 4px;">
                        {TitleOfCourtesy}</div>
                    <div class="FieldPlaceholder DataOnly" style="margin: 4px;">
                        {FirstName}</div>
                    <div class="FieldPlaceholder DataOnly" style="float: none; margin: 4px;">
                        {LastName}</div>
                    <div class="FieldPlaceholder DataOnly" style="float: none; margin: 4px;">
                        {BirthDate}</div>
                    <div class="FieldPlaceholder DataOnly" style="float: none; margin: 4px;">
                        {Title}</div>
                    <div class="FieldPlaceholder DataOnly" style="float: none; margin: 4px;">
                        {HireDate}</div>
                </td>
                <td style="vertical-align: top; padding-left: 10px;">
                    <table>
                        <tr>
                            <td>
                                <div class="FieldPlaceholder DataOnly">
                                    {Address}</div>
                            </td>
                        </tr>
                        <tr>
                            <td>
                                <div class="FieldPlaceholder DataOnly">
                                    {City}</div>
                                <span style="float: left; margin-right: 4px;">,</span>
                                <div class="FieldPlaceholder DataOnly">
                                    {Region}</div>
                            </td>
                        </tr>
                        <tr>
                            <td style="vertical-align: top;">
                                <div class="FieldPlaceholder DataOnly">
                                    {PostalCode}</div>
                            </td>
                        </tr>
                    </table>
                </td>
                <td style="vertical-align: top; padding-left: 10px; width:300px;">
                    <div class="FieldPlaceholder DataOnly">
                        {Notes}</div>
                </td>
            </tr>
        </table>
    </div>
</div>

The outermost div in the custom template has CSS property display set to “none”, to prevent the static template from being displayed to the users. The next div has an id of “Employees_grid1”, which means that the template will be used for the grid1 view of Employees controller.

Inside, there is a table with three columns, each containing field placeholders wrapped in curly brackets. The CSS class FieldPlaceholder makes each data field float, while the class DataOnly hides the label of the data field.

Save the file, and refresh the web application page. Select any record, and you will see the new custom grid template at work.

Employees grid view using custom template in Code On Time web application

There is one small problem. When a row is selected, there is no way of editing the record inline. This requires addition of an Edit action in the row scope.

Switch back to the web application Designer. In the Project Explorer, right-click on Employees / container1 / view1 / Actions / ag8 (Row), and select New Action. Enter the following properties:

Property Value
Command Name Edit
When Client Script !this.get_isDataSheet()

New 'Edit' Action in 'ag8' Action Group

The When Client Script property is needed to hide the action in Data Sheet mode.

Please note that custom templates are not supported in Data Sheet mode.

Press OK to save, and press Browse on the tool bar to regenerate and open the web application in your default web browser. Go to the Employees page, and select any employee. You will see that there is now an Edit button underneath the selected row.

Employees grid view with custom template and Edit button

If you press this Edit button, the row will change to inline edit mode, using the custom grid template.

Employee record using custom template with inline editing mode

Press Cancel, mouse over the context menu of one of the rows, and press New. This will activate inline new mode, also using the custom template.

Employee record using custom template with inline new mode

Saturday, April 7, 2012PrintSubscribe
Category-Level Templates

The default editForm1 view of Orders is displayed below.

Default 'editForm1' of Orders in Code On Time web application

If you want to modify the layout of the entire form view, you can create a custom form template. However, this method has some disadvantages: multi-column data field categories, tabbed categories, and annotations will no longer be available in the customized form view.

You can preserve this functionality with the use of category-level templates, which customize individual data field categories, instead of replacing the entire form.

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

New user control 'Orders_CategoryTemplate' in Code On Time Designer

Press OK to save the user control.

Let’s add the user control to the Orders page. Right-click on Customers / Orders / container1, and select New Control.

'New Control' option on container1 of Orders page in Code On Time Designer

In the User Control property, select Orders_CategoryTemplate.

New Control of User Control 'Orders_CategoryTemplate'

Press OK to save the control.

Next, we’ll need to create a new category and move some of the data fields. Right-click on Customers / Orders / container1 / view1 / editForm1, and select New Category. Give it the following settings:

Property Value
Header Text Shipping Information
Description This is the shipping information for this order.
New Column Yes

Properties for new 'Shipping Information' category in Code On Time web application Designer

Press OK to save the category, and you will see it appear in the Project Explorer. Right-click on the new category, and select New Data Field.

New Data Field context menu option in Code On Time Project Explorer

For the Field Name property, select “ShipName”. Press OK to save the data field. You will see the data field removed from category c1 and added to category c100. Using the same procedure, add the following data fields:

Field Name
ShipName
ShipAddress
ShipCity
ShipRegion
ShipPostalCode
ShipCountry

Exit the Designer, and press Generate to generate the application and create the user control.

Once complete, switch back to the web app generator, click on the project name, and press Develop. This will open the project in Visual Studio. Double-click on ~/Controls/Orders_CategoryTemplate.ascx to open the file. Press Ctrl+K, Ctrl+D to format the document. You will see a @Control header at the top, and an UpdatePanel underneath.

Default user control in Visual Studio

Delete the UpdatePanel, preserving the @Control header, and paste in the following markup:

<div style="display: none;">
    <div id="Orders_editForm1_c100">
        <div style="padding: 4px 4px 4px 0px">
            <div class="FieldPlaceholder DataOnly">
                {ShipName}</div>
            <div style="clear: both">
            </div>
        </div>
        <div style="padding: 0px 4px 4px 0px">
            <div class="FieldPlaceholder DataOnly">
                {ShipAddress}</div>
            <div style="clear: both">
            </div>
        </div>
        <div style="padding: 0px 4px 4px 0px">
            <div class="FieldPlaceholder DataOnly">
                {ShipCity}</div>
            <div style="float: left; margin-right: 8px;">
                ,</div>
            <div class="FieldPlaceholder DataOnly" style="margin-right: 8px">
                {ShipRegion}</div>
            <div class="FieldPlaceholder DataOnly">
                {ShipPostalCode}</div>
            <div style="clear: both">
            </div>
        </div>
        <div style="padding: 0px 4px 4px 0px">
            <div class="FieldPlaceholder DataOnly">
                {ShipCountry}</div>
            <div style="clear: both">
            </div>
        </div>
    </div>
</div>

The markup above has one div wrapping the entire block that sets a CSS style of “display:none”. This will prevent the text of the template from being displayed to the end user. There is another div with idOrders_editForm1_c100”, which specifies the controller name, view ID, and category ID that the template will be applied to. The rest of the HTML is used to format the field placeholders, which consist of the field names surrounded by curly brackets. The class FieldPlaceholder makes the data field float in the template body, and the class DataOnly hides the field label.

Switch back to the generator, click on the project name, and click Browse to start the application in your default browser. Navigate to Orders page, and select any order. You will see that there is a standard list of fields in a category on the left side of the page. On the right side, there is the category with a custom template.

Category using custom form template in Code On Time web application

You can define templates for all or some of the categories of the form view in the same user control. The order of the templates does not matter. Your own custom category-level template will look similar to the sample below.

<%@ Control . . . . .%>
<div style="display: none;">
    <div id="Orders_editForm1_c100">
        . . . . .
    </div>
    <div id="Orders_editForm1_c1">
        . . . . .
    </div>
</div>
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