Skip to content

clsDropDownController

clsDropDownController is a non-rendering System.Web.UI.Control subclass that cascades two UltraWebGrid columns' drop-down value lists: it binds a parent column and a child column to consumer-supplied data sources, and generates the client-side JavaScript that filters the child column's options to only those associated with the parent column's currently selected value. It is declared on a page alongside the grid it targets and is driven entirely by the standard DataBind lifecycle call; it has no rendering output of its own and no other type in this library calls it.

Purpose

  • Bind a parent (Column1) and child (Column2) UltraWebGrid column's value lists from consumer-supplied IEnumerable sources (BR-CTL-004).
  • Project both data sources into flattened ListItem lookup lists, skipping members that cannot be converted to String (BR-CTL-005).
  • Generate and register a uniquely named client-side handler that filters the child column's value list to the options matching the parent column's selected value (BR-CTL-001, BR-CTL-002, BR-CTL-003).

Context

  • Namespace: SAIF.Presentation.Web.Controls.V2
  • Assembly/package: SAIF.Presentation.Web.Controls.Infragistics111 (packaged as source into SAIF.BOF.Presentation.Web.Infragistics111)
  • Base class: System.Web.UI.Control (.NET Base Class Library; not a vendor or SAIF framework type)

Public members

Member Signature Purpose
Column1 Public Property Column1() As Infragistics.WebUI.UltraWebGrid.UltraGridColumn The parent (filtering) grid column whose selected value drives which options appear in Column2.
Column2 Public Property Column2() As Infragistics.WebUI.UltraWebGrid.UltraGridColumn The child (filtered) grid column whose value list is rebuilt from the parent column's selection.
List1 Public Property List1() As IEnumerable The data source bound to Column1's value list.
List2 Public Property List2() As IEnumerable The data source bound to Column2's value list.
List1Code Public Property List1Code() As String Name of the property on List1 items supplying the value member for Column1's value list.
List2Code Public Property List2Code() As String Name of the property on List2 items supplying the value member for Column2's value list.
List1Display Public Property List1Display() As String Name of the property on List1 items supplying the display member for Column1's value list.
List2Display Public Property List2Display() As String Name of the property on List2 items supplying the display member for Column2's value list.
List2Key Public Property List2Key() As String Name of the property on List2 items holding the parent code used to group child options under their parent (BR-CTL-002).
l1 Public l1 As New ArrayList The flattened ListItem projection of List1, built by DataBind and read by GenerateJavaScript to emit the parent switch cases.
l2 Public l2 As New ArrayList The flattened ListItem projection of List2, built by DataBind and read by GenerateJavaScript to emit each parent case's filtered child options.
DataBind Public Overrides Sub DataBind() Binds both grid columns' value lists, projects both sources into l1/l2, wires the grid's BeforeEnterEditModeHandler, and registers the generated cascade script; see Cascade grid drop-down value lists.
GenerateJavaScript Public Function GenerateJavaScript() As String Builds and returns the BeforeEdit<Column2Key> client function that replaces the child column's value list based on the parent cell value; see Generate the cascade script.

Behavioral notes

  • DataBind calls GenerateJavaScript() twice — once discarding the result, then again to register the returned script — which is redundant work with no observable side effect from the discarded call.*
  • Generated script values (item codes and descriptions) are concatenated into JavaScript string literals without HTML/JS encoding, which is a script-injection risk if list values are influenced by user input (BR-CTL-006).**
  • DataBind has no null guard on Column1/Column2; an unset column raises an unhandled NullReferenceException.

Constraints and usage notes

  • Option Strict is Off in this project, and DataBind's reflection-based projection relies on late-bound TypeConverter conversion; only properties whose TypeConverter can target System.String contribute to l1/l2 (BR-CTL-005).
  • Behavior depends on the Infragistics 11.1 UltraWebGrid client-side API (igtbl_getColumnById, igtbl_getRowById, getCellFromKey) and is version-locked to Infragistics35.WebUI.UltraWebGrid.v11.1.*

Note: Statements marked with * were inferred from code structure, naming conventions, or contextual evidence where direct confirmation was not available in source artifacts. Statements marked with ** could not be confirmed; treat as unknown until verified.

Sources

  • SAIF.Presentation.Web.Controls.Infragistics111/clsDropDownController.vb