Suppose that you want to change a field that renders as a textbox into a static drop down list of items, such as the Reorder Level field in the Products controller of the Northwind sample. By default, users can enter any numeric value in the field.
Let’s change this by offering a drop down list of predefined items, and have the item values displayed as words.
You can do this at design time, as explained in Creating Static Lookup Items. However, there may be other situations when you don’t want to change the physical properties of the application. For example, the static items maybe displayed only to users in specific roles. For this purpose, you can use virtualization node sets.
First, you will need to enable shared business rules.
Next, switch to the web application generator, select the project name, and press Develop. This will open the project in Visual Studio.
In the Solution Explorer, navigate to ~/App_Code/Rules/SharedBusinessRules.cs(vb). The code will need to enable virtualization if the controller name is “Products”. The virtualized Products controller will have a modified ReorderLevel field. The Items Style will be changed to “Drop Down List”, and it will have the following static items:
Value | Text |
0 | Zero |
5 | Five |
10 | Ten |
15 | Fifteen |
20 | Twenty |
25 | Twenty-five |
30 | Thirty |
Place the code into your SharedBusinessRules.cs(vb) file:
C#:
using System;
using System.Data;
using System.Collections.Generic;
using System.Linq;
using MyCompany.Data;
namespace MyCompany.Rules
{
public partial class SharedBusinessRules : MyCompany.Data.BusinessRules
{
public override bool SupportsVirtualization(string controllerName)
{
if (controllerName == "Products")
return true;
return false;
}
protected override void VirtualizeController(string controllerName)
{
if (controllerName == "Products")
{
NodeSet().SelectField("ReorderLevel")
.SetItemsStyle("DropDownList")
.CreateItem(0, "Zero")
.CreateItem(5, "Five")
.CreateItem(10, "Ten")
.CreateItem(15, "Fifteen")
.CreateItem(20, "Twenty")
.CreateItem(25, "Twenty-five")
.CreateItem(30, "Thirty");
}
}
}
}
Visual Basic:
Imports MyCompany.Data
Imports System
Imports System.Collections.Generic
Imports System.Data
Imports System.Linq
Namespace MyCompany.Rules
Partial Public Class SharedBusinessRules
Inherits MyCompany.Data.BusinessRules
Public Overrides Function SupportsVirtualization(controllerName As String) As Boolean
If (controllerName = "Products") Then
Return True
Else
Return False
End If
End Function
Protected Overrides Sub VirtualizeController(controllerName As String)
If (controllerName = "Products") Then
NodeSet().SelectField("ReorderLevel") _
.SetItemsStyle("DropDownList") _
.CreateItem(0, "Zero") _
.CreateItem(5, "Five") _
.CreateItem(10, "Ten") _
.CreateItem(15, "Fifteen") _
.CreateItem(20, "Twenty") _
.CreateItem(25, "Twenty-five") _
.CreateItem(30, "Thirty")
End If
End Sub
End Class
End Namespace
Save this file and run the web application. You will see that the Products controller now displays Reorder Level filter options as words, and the field is rendered as a drop down list.