---
title: clsDropDownController
summary: API reference for clsDropDownController.
status: draft
owner: SAIF Documentation Team
last_reviewed: 2026-08-17
library: SAIF.Presentation.Web.Controls.Infragistics103
reference_type: package
---

# clsDropDownController

`clsDropDownController` is a generic, business-entity-agnostic binder that wires two dependent dropdown-style value lists onto a pair of `UltraGridColumn`s on an `UltraWebGrid`, so that the second column's editable options are filtered per row to match the first column's selected value ([BR-5](../../business-rules.md#br-5-cascading-dropdown-filters-column2-options-by-column1-key)). It uses reflection (`System.ComponentModel.TypeDescriptor`) to read arbitrary properties off `List1`/`List2` data sources by property-name convention, decoupling it from any specific SAIF business-object type, and it generates and registers the client-side JavaScript filter function that Infragistics invokes when a Column2 cell enters edit mode.

## Purpose
- Bind cascading/dependent value lists to two `UltraGridColumn`s from arbitrary `IEnumerable` data sources, using reflection rather than a compile-time-typed binder.
- Generate and register the client-side JavaScript function that restricts a grid cell's available dropdown options based on the value of another cell in the same row ([BR-5](../../business-rules.md#br-5-cascading-dropdown-filters-column2-options-by-column1-key)).

## Context
- Namespace: `SAIF.Presentation.Web.Controls.V2`
- Assembly/package: `SAIF.BOF.Presentation.Web.Infragistics103` (source bundled into this package)*

## Public members
| Member | Signature | Purpose |
| --- | --- | --- |
| `Column1` | `Public Property Column1 As Infragistics.WebUI.UltraWebGrid.UltraGridColumn` | The grid column whose selected value determines which options are available in `Column2`. |
| `Column2` | `Public Property Column2 As Infragistics.WebUI.UltraWebGrid.UltraGridColumn` | The dependent grid column whose value list is filtered based on `Column1`'s selection. |
| `List1` | `Public Property List1 As IEnumerable` | Data source used to populate `Column1`'s value list and the `l1` reflection-derived collection. |
| `List2` | `Public Property List2 As IEnumerable` | Data source used to populate `Column2`'s value list and the `l2` reflection-derived collection. |
| `List1Code` | `Public Property List1Code As String` | Property name read via reflection to obtain each `List1` item's code/value (`ListItem.id`). |
| `List1Display` | `Public Property List1Display As String` | Property name read via reflection to obtain each `List1` item's display text (`ListItem.desc`). |
| `List2Code` | `Public Property List2Code As String` | Property name read via reflection to obtain each `List2` item's code/value (`ListItem.id`). |
| `List2Display` | `Public Property List2Display As String` | Property name read via reflection to obtain each `List2` item's display text (`ListItem.desc`). |
| `List2Key` | `Public Property List2Key As String` | Property name read via reflection to obtain each `List2` item's linking key to a `List1` item (`ListItem.key`), the basis of the [BR-5](../../business-rules.md#br-5-cascading-dropdown-filters-column2-options-by-column1-key) filter match. |
| `l1` | `Public Field l1 As ArrayList` (of `ListItem`) | Reflection-derived staging collection of `List1` items, populated during `DataBind` and consumed by `GenerateJavaScript`. |
| `l2` | `Public Field l2 As ArrayList` (of `ListItem`) | Reflection-derived staging collection of `List2` items, populated during `DataBind` and consumed by `GenerateJavaScript`. |
| `DataBind` | `Public Overrides Sub DataBind()` | Binds `Column1`/`Column2` value lists, projects `List1`/`List2` via reflection into `ListItem`s, and registers the generated filter script; see [Cascading dropdown data bind](../../operations/cascading-dropdown-data-bind.md). |
| `GenerateJavaScript` | `Public Function GenerateJavaScript() As String` | Builds the `BeforeEdit{Column2.Key}` client-side filter function from the `l1`/`l2` collections; see [Cascading dropdown JavaScript generation](../../operations/cascading-dropdown-javascript-generation.md). |

### Nested type: `ListItem`
| Member | Signature | Purpose |
| --- | --- | --- |
| `id` | `Public Field id As String` | Staged code/value extracted via reflection from a `List1`/`List2` item, using the `List1Code`/`List2Code` property name. |
| `desc` | `Public Field desc As String` | Staged display text extracted via reflection, using the `List1Display`/`List2Display` property name. |
| `key` | `Public Field key As String` | Staged linking key (only populated for `List2` items) used to match against a `List1` item's `id` when filtering ([BR-5](../../business-rules.md#br-5-cascading-dropdown-filters-column2-options-by-column1-key)). |

## Inherited public members

Members in this section are inherited from `System.Web.UI.Control`, the base ASP.NET control class this class extends.

| Member | Signature | Purpose |
| --- | --- | --- |
| `ID` | `Public Overridable Property ID As String` | The control's server-side identifier within its naming container. |
| `Page` | `Public Property Page As Page` | The hosting page instance; used by `DataBind` to call `Page.ClientScript.RegisterClientScriptBlock` when registering the generated `"DD"` filter script. |
| `Controls` | `Public ReadOnly Property Controls As ControlCollection` | The child-control collection of this control (unused directly by `clsDropDownController`'s own logic beyond the base implementation). |
| `Visible` | `Public Overridable Property Visible As Boolean` | Determines whether the control (and any markup it would render) is included in the rendered output. |
| `DataBind` (base) | `Public Overridable Sub DataBind()` | Base data-binding entry point; invoked via `MyBase.DataBind()` at the start of `clsDropDownController.DataBind` before the derived binding logic runs. |
| `FindControl` | `Public Function FindControl(id As String) As Control` | Looks up a child control by ID within the naming container. |
| `NamingContainer` | `Public ReadOnly Property NamingContainer As Control` | The nearest ancestor container that implements `INamingContainer`. |

## Behavioral notes
- If no `TypeConverter` to `String` is found for a reflected property (`List1Code`/`List1Display`/`List2Code`/`List2Display`/`List2Key`), the corresponding `ListItem` field is silently left blank rather than raising an exception.
- `DataBind` calls `GenerateJavaScript()` twice, discarding the first result; only the second call's output is registered as the `"DD"` client script block.
- Whether this control is actively consumed by any current front-end page in this repository (versus being legacy/unused) was not verified**.

## Constraints and usage notes
- Requires an `UltraWebGrid` with `UltraGridColumn` instances (`Infragistics35.WebUI.UltraWebGrid.v10.3`, version `10.3.20103.2120`).
- Depends on a runtime convention (property-name matching) rather than a compile-time contract with the `List1`/`List2` item types.

> **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.Infragistics103\clsDropDownController.vb
