Skip to content

clsDropDownController

clsDropDownController is a generic, business-entity-agnostic binder that wires two dependent dropdown-style value lists onto a pair of UltraGridColumns 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). 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 UltraGridColumns 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).

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 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 ListItems, and registers the generated filter script; see Cascading dropdown data bind.
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.

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).

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