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
Thursday, February 28, 2013PrintSubscribe
“Freezing” Data Fields

A common practice in data sheets is to “freeze” a column so that essential information is always displayed for each row. The second generation data sheet allows both freezing columns at run-time, as well as configuring a column to be frozen at design-time.

Freezing at Run-Time

Create a sample Northwind web application. Browse the site, and navigate to the Order Details page. On the action bar, press Actions | Show in Data Sheet.

Changing the grid view to data sheet view.

Activate the column header dropdown for Product Name, and press Freeze.

Activating 'Freeze' option for Product Name column.

All columns up to the frozen column will change color. When the data sheet is scrolled to the right, the frozen columns will continue to be displayed.

Frozen columns 'Order Customer#' and 'Product Name' continue to be displayed when the data sheet is scrolled to the right.

Columns can be added or removed from the freeze by activating the Freeze option for that column. You may unfreeze the column by activating the column header dropdown and pressing Unfreeze.

Unfreezing the Product Name column.

Freezing at Design-Time

Start the Project Designer. In the Project Explorer, double-click on Customers / Order Details / container1 / view1 (OrderDetails, grid1) / grid1 / ProductID –> ProductProductName data field node.

Data field 'ProductID' of view 'grid1'.

Assign a tag.

Property New Value
Tags data-sheet-freeze

Press OK to save the field. On the toolbar, press Browse. On the action bar, press Actions | Show in Data Sheet.

Changing the grid view to data sheet view.

When the data sheet loads, the Product Name column will be frozen by default.

The column 'Product Name' is frozen by default.

The frozen columns can still be changed by the user using the method described in the previous section.

Thursday, February 21, 2013PrintSubscribe
Action “When View” Property

The “When View” property allows controlling the visibility of an action based on the current view.

For example, let’s create a custom action that will display the extended price of an order detail. This action will be available on editForm1 and grid1 by default. Let’s prevent the action from being displayed on grid1 by using When View property.

Creating the Action and Business Rule

Start the Project Designer. In the Project Explorer, switch to the Controllers tab. Right-click on OrderDetails / Actions / ag3 (ActionBar) – New node, and press New Action.

Creating a new action in action group 'ag3'.

Assign the following values.

Property Value
Command Name Custom
Command Argument ShowExtendedPrice
Header Text Extended Price

Press OK to save. Right-click on OrderDetails / Business Rules node, and press New Business Rule.

Creating a new business rule in OrderDetails controller.

Use the following configuration:

Property Value
Type JavaScript
Command Name Custom
Command Argument ShowExtendedPrice
Phase Execute
Script
var extendedPrice = [UnitPrice] * (1 - [Discount]) * [Quantity];
alert(String.localeFormat('{0:c}', extendedPrice));

Press OK to save.

On the toolbar, press Browse. Navigate to the Order Details page. The Extended Price button will be present on the action bar. When you select a row and activate the button, the extended price will be displayed in an alert.

Extended Price action available on view 'grid1'.

Select a record – the action will also be available on editForm1.

Extended Price action available on view 'editForm1'.

Note that the action is not available on createForm1. This is because the When Last Command Name property of the action is blank (which is equivalent to “Select”). View createForm1 is activated by triggering the “New” action, resulting in the Extended Price action being hidden.

Specifying “When View”

Let’s restrict display of the Extended Price action to editForm1 using the When View property.

In the Project Explorer, double-click on OrderDetails / Actions / ag3 (ActionBar) – New / a100 – Custom, ShowExtendedPrice | Extended Price action node.

Extended Price action in the Project Explorer.

Change the When View property:

Property New Value
When View editForm1

Press OK to save.

Viewing the Results

On the toolbar, press Browse. Navigate to the Order Details page. Note that the action is no longer displayed in grid1.

Extended Price action not displayed in view 'grid1'.

Select a record. The action will be available in editForm1.

Extended Price action displayed in view 'editForm1'.

Sunday, January 20, 2013PrintSubscribe
Custom Filter Panel

Let’s create a page that will contain a custom user control and a data view. The user control will contain several buttons that will programmatically change the filter on the data view.

Adding the Page

Start the Project Designer. On the Project Explorer toolbar, click on the New Page icon.

Creating a new page.

Assign a name to the page:

Property Value
Name Custom Filter Panel

Press OK to save. Drop the Custom Filter Panel page node on the right side of Home page node to place it second in the menu.

Dropping 'Custom Filter Panel' page on the right side of 'Home' page.     Page 'Custom Filter Panel' has been placed second in the menu.

Right-click on Custom Filter Panel node, and press New Container.

Adding a new container to the 'Custom Filter Panel' page.

Keep the default configuration and press OK to save the container. Right-click on Custom Filter Panel / c101 container node, and press New Control.

Creating a new control in container 'c101'.

Next to the User Control lookup, click on the New User Control icon.

Creating a new user control.

Assign the user control a name:

Property Value
Name FilterPanel

Press OK to create the new user control. Press OK to add the control to the page.

Implementing the User Control

On the Project Designer toolbar, press Browse to generate the application and user control file.

When complete, right-click on Custom Filter Panel / c101 / control1 – FilterPanel node and press Edit in Visual Studio.

Editing the custom user control file in Visual Studio.

The user control file will be opened in Visual Studio. Replace the code base after the <%@ Control %> element with the following:

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <div style="margin-bottom:4px">
            <h2 style="margin-bottom:4px; margin-top:6px;">Select a filter:</h2>
            <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Shipped" />
            <asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="Not Shipped" />
            <asp:Button ID="Button3" runat="server" OnClick="Button3_Click" Text="High Freight" />
            <asp:Button ID="Button4" runat="server" OnClick="Button4_Click" Text="Reset" />
        </div>
    </ContentTemplate>
</asp:UpdatePanel>
<div id="OrderList" runat="server">
</div>
<aquarium:DataViewExtender ID="dve1" runat="server" TargetControlID="OrderList"
    Controller="Orders" />

The code above will add four buttons and an Orders data view. Right-click and press View Code.

'View Code' context menu option for the user control file in Visual Studio.

Replace the existing code base with the following:

C#:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using MyCompany.Web;
using MyCompany.Data;

public partial class Controls_FilterPanel : System.Web.UI.UserControl
{
    // assign filter when page loads
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
            dve1.AssignStartupFilter(new FieldFilter[] { 
                new FieldFilter(
                    "ShippedDate", 
                    RowFilterOperation.DoesNotInclude,
                    null) });
    }
    // filter ShippedDate to not null
    protected void Button1_Click(object sender, EventArgs e)
    {
        dve1.AssignFilter(new FieldFilter[] { 
            new FieldFilter(
                    "ShippedDate", 
                    RowFilterOperation.DoesNotInclude,
                    null), 
            new FieldFilter(
                "Freight",
                RowFilterOperation.None) });
    }
    // filter ShippedDate to null
    protected void Button2_Click(object sender, EventArgs e)
    {
        dve1.AssignFilter(new FieldFilter[] { 
            new FieldFilter(
                "ShippedDate", 
                RowFilterOperation.Equal,
                null), 
            new FieldFilter(
                "Freight",
                RowFilterOperation.None) });
    }
    // filter Freight to >30
    protected void Button3_Click(object sender, EventArgs e)
    {
        dve1.AssignFilter(new FieldFilter[] { 
            new FieldFilter(
                "Freight", 
                RowFilterOperation.GreaterThan, 
                30), 
            new FieldFilter(
                "ShippedDate",
                RowFilterOperation.None)});
    }
    // reset filter when Reset button clicked
    protected void Button4_Click(object sender, EventArgs e)
    {
        dve1.AssignFilter(new FieldFilter[] { 
            new FieldFilter(
                "ShippedDate", 
                RowFilterOperation.None), 
            new FieldFilter(
                "Freight",
                RowFilterOperation.None) });
    }
}

Visual Basic:

Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Text.RegularExpressions
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports MyCompany.Web
Imports MyCompany.Data


Partial Public Class Controls_FilterPanel
    Inherits Global.System.Web.UI.UserControl
    ' assign filter when page loads
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
        If Not IsPostBack Then
            dve1.AssignStartupFilter(New FieldFilter() {
                                     New FieldFilter(
                                         "ShippedDate",
                                         RowFilterOperation.Equal,
                                         Nothing)})
        End If
    End Sub
    ' filter ShippedDate to not null
    Protected Sub Button1_Click(sender As Object, e As EventArgs)
        dve1.AssignFilter(New FieldFilter() {
                                     New FieldFilter(
                                         "ShippedDate",
                                         RowFilterOperation.NotEqual,
                                         Nothing),
                                    New FieldFilter(
                                        "Freight",
                                        RowFilterOperation.None)})
    End Sub
    ' filter ShippedDate to null
    Protected Sub Button2_Click(sender As Object, e As EventArgs)
        dve1.AssignFilter(New FieldFilter() {
                                     New FieldFilter(
                                         "ShippedDate",
                                         RowFilterOperation.Equal,
                                         Nothing),
                                    New FieldFilter(
                                        "Freight",
                                        RowFilterOperation.None)})
    End Sub
    ' filter Freight to >30
    Protected Sub Button3_Click(sender As Object, e As EventArgs)
        dve1.AssignFilter(New FieldFilter() {
                                     New FieldFilter(
                                         "ShippedDate",
                                         RowFilterOperation.None),
                                    New FieldFilter(
                                        "Freight",
                                        RowFilterOperation.GreaterThan,
                                        30)})
    End Sub
    ' reset filter when Reset button clicked
    Protected Sub Button4_Click(sender As Object, e As EventArgs)
        dve1.AssignFilter(New FieldFilter() {
                                     New FieldFilter(
                                         "ShippedDate",
                                         RowFilterOperation.None),
                                    New FieldFilter(
                                        "Freight",
                                        RowFilterOperation.None)})
    End Sub
End Class

The code will assign filters when any of the buttons are pressed. Save the file.

Viewing the Results

Switch to the open web application and refresh the page. Navigate to Custom Filter Panel page. The page will contain four buttons and an Orders data view. The data view will be filtered to show only rows that have a value in Shipped Date field.

The data view on 'Custom Filter Panel' page will be filtered when the page loads.

Click on one of the first three buttons. The filter will change accordingly.

Clicking on one of the buttons will change the filter.

Clicking on the Reset button will clear all filters.

The 'Reset' button will clear all filters.