---
title: clsDropDownController
summary: API reference for clsDropDownController.
status: draft
owner: SAIF Doc Gen
last_reviewed: 2026-08-17
library: SAIF.Presentation.Web.Controls.Infragistics111
reference_type: package
---

# 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](../../business-rules.md#br-ctl-004-explicit-value-and-display-members-required-for-cascaded-columns)).
- Project both data sources into flattened `ListItem` lookup lists, skipping members that cannot be converted to `String` ([BR-CTL-005](../../business-rules.md#br-ctl-005-only-string-convertible-properties-populate-generated-lists)).
- 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](../../business-rules.md#br-ctl-001-filter-child-drop-down-by-parent-value), [BR-CTL-002](../../business-rules.md#br-ctl-002-case-insensitive-parent-child-key-match), [BR-CTL-003](../../business-rules.md#br-ctl-003-cascade-handler-name-derived-from-child-column-key)).

## 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](../../business-rules.md#br-ctl-002-case-insensitive-parent-child-key-match)). |
| `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](../../operations/cascade-grid-dropdown-value-lists.md). |
| `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](../../operations/generate-cascade-script.md). |

## 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](../../business-rules.md#br-ctl-006-generated-script-values-are-not-encoded)).**
- `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](../../business-rules.md#br-ctl-005-only-string-convertible-properties-populate-generated-lists)).
- 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`
