---
title: clsUltraGridBinder
summary: API reference for clsUltraGridBinder.
status: draft
owner: SAIF documentation team
last_reviewed: 2026-08-17
library: SAIF.Presentation.Web.Binding.Infragistics103
reference_type: embedded
---

# clsUltraGridBinder

This binder is the classic Infragistics v10.3 grid adapter that lets `clsObjectBindManager` treat an `UltraWebGrid` as a bindable collection surface, including hierarchical-band lookups and validation feedback mapped back to specific rows and columns. It is the legacy `InfragisticsClassicControls` grid implementation, distinct from the newer `InfragisticsControls` data-grid binders in the same library.

## Purpose
- Bind an `IEnumerable` business-object collection to a classic `UltraWebGrid` for object-to-control display.
- Push edited grid cell values back into matching objects by key, including hierarchical child-band rows.
- Translate `IDataErrorInfo` validation failures into grid-specific row and cell feedback instead of generic control CSS, aligning with [BR-BIND-002](../../business-rules.md#br-bind-002-gridlist-controls-exempt-from-cell-level-errorvalid-css).

## Context
- Namespace: `SAIF.Presentation.Web.Binding`
- Assembly/package: `SAIF.Presentation.Web.Binding.Infragistics103` (embedded/bundled as source, not independently packaged)

## Public members
| Member | Signature | Purpose |
| --- | --- | --- |
| BindSource | `Property BindSource() As IEnumerable` | Supplies the collection displayed in the grid and the collection-level validation source checked during error harvesting. |
| KeyProperty | `Property KeyProperty() As String` | Identifies the object property used to match top-level grid rows back to collection items during updates and validation. |
| HierarchialKeys | `Property HierarchialKeys() As HierarchialGridArgs` | Provides per-band key-property mappings used when the grid is configured with hierarchical child bands. |
| UltraGrid | `Property UltraGrid() As UltraWebGrid` | Attaches the classic `UltraWebGrid` instance and registers it with the base binder infrastructure. |
| FirstRowWithError | `Property FirstRowWithError As UltraGridRow` | Exposes the first row tracked for error focus/navigation scenarios. |
| FirstColumnWithError | `Property FirstColumnWithError As String` | Exposes the first column key tracked for error focus/navigation scenarios. |
| Init() | `Overrides Sub Init()` | Hooks `UpdateRowBatch` so grid edits can be pushed into the bound objects as rows are updated. |
| ObjectToControl() | `Overrides Function ObjectToControl() As Boolean` | Binds the current collection as the grid's data source and executes `DataBind()`. |
| GetGridRow(inKey As String) | `Function GetGridRow(ByVal inKey As String) As UltraGridRow` | Finds a top-level grid row by the configured key-property value. |
| GetGridRow(inBand As String, inKey As String) | `Function GetGridRow(ByVal inBand As String, ByVal inKey As String) As UltraGridRow` | Finds a hierarchical child row by band key plus that band's configured key-property value. |
| New() | `Sub New()` | Creates an unconfigured grid binder ready for property assignment by manager code. |
| New(inArgs As UltraGridBindingArgs) | `Sub New(ByVal inArgs As UltraGridBindingArgs)` | Seeds the binder from the grid argument bag, including grid, collection, validation source, bind type, and key property. |

## Inherited public members

| Member | Signature | Purpose | Origin |
| --- | --- | --- | --- |
| ContainsError | `ReadOnly Property ContainsError As Boolean` | Set by GetErrors()/validation processing; when true, Validate()/RefreshValidation() counts this binder toward the overall invalid result and its control receives error-state CSS via SetControlFormat(). | `SAIF.Presentation.Web.Binding.Infragistics103` — `clsObjectBinderBase` |
| IsDualBinding | `ReadOnly Property IsDualBinding As Boolean` | When true, ObjectToControl()/ControlToObject() read and write the display object/property while GetErrors() checks a separate validation object/property, as configured by AddDualBinder(). | `SAIF.Presentation.Web.Binding.Infragistics103` — `clsObjectBinderBase` |
| ControlPadding | `Property ControlPadding As PadArgs` | When UsePadding is enabled, pads or trims the value written to the control during ObjectToControl(), so fixed-width display formatting is applied without changing the underlying object value. | `SAIF.Presentation.Web.Binding.Infragistics103` — `clsObjectBinderBase` |
| ObjectPadding | `Property ObjectPadding As PadArgs` | When UsePadding is enabled, pads or strips padding from the value written back to the bound property during ControlToObject(), so stored data is not polluted with display-only padding characters. | `SAIF.Presentation.Web.Binding.Infragistics103` — `clsObjectBinderBase` |
| UsePadding | `Property UsePadding As Boolean` | Enables the ControlPadding/ObjectPadding transforms during ObjectToControl()/ControlToObject(); when false, values pass through unpadded regardless of the padding arguments configured. | `SAIF.Presentation.Web.Binding.Infragistics103` — `clsObjectBinderBase` |
| UseEvents | `Property UseEvents As Boolean` | When true, Init() wires the control's native change event so a user edit immediately calls ControlToObject() instead of waiting for an explicit BindToObject()/Validate() call. | `SAIF.Presentation.Web.Binding.Infragistics103` — `clsObjectBinderBase` |
| ControlErrors | `ReadOnly Property ControlErrors As ArrayList` | Holds the error text GetErrors() collects from the bound object's IDataErrorInfo implementation; Validate() aggregates these strings into the consolidated ErrorLabel/SAIFMessage output. | `SAIF.Presentation.Web.Binding.Infragistics103` — `clsObjectBinderBase` |
| BindType | `Property BindType As BindTypes` | Determines which of ObjectToControl()/ControlToObject() actually run during DataBind()/BindToObject(), controlling whether this binder is push-only, pull-only, both, or validation-only. | `SAIF.Presentation.Web.Binding.Infragistics103` — `clsObjectBinderBase` |
| FormControl | `Overridable Property FormControl As WebControl` | Setting this property runs ProcessControl, which applies binder-specific control setup (event wiring readiness, CSS baseline) before the control participates in binding and validation passes. | `SAIF.Presentation.Web.Binding.Infragistics103` — `clsObjectBinderBase` |
| FormControlID | `Overridable ReadOnly Property FormControlID As String` | Supplied to Update() and error-focus logic to locate this binder's control instance on the page without holding a direct control reference. | `SAIF.Presentation.Web.Binding.Infragistics103` — `clsObjectBinderBase` |
| Init() | `MustOverride Sub Init()` | Called once during AddBinder() registration; each concrete binder overrides this to hook the native control event needed for event-driven ControlToObject() and to perform any control-specific setup. | `SAIF.Presentation.Web.Binding.Infragistics103` — `clsObjectBinderBase` |
| ObjectToControl() | `MustOverride Function ObjectToControl() As Boolean` | Invoked by DataBind() for binders configured as ObjectToControl/TwoWay; each concrete binder overrides this to translate the bound property's value into the control-specific display state. | `SAIF.Presentation.Web.Binding.Infragistics103` — `clsObjectBinderBase` |
| ControlToObject() | `Protected Friend MustOverride Sub ControlToObject()` | Invoked by BindToObject() for binders configured as ControlToObject/TwoWay; each concrete binder overrides this to convert the control's current value back into the bound property's type. | `SAIF.Presentation.Web.Binding.Infragistics103` — `clsObjectBinderBase` |
| SetControlFormat(inValid As Boolean) | `Protected Friend Overridable Sub SetControlFormat(inValid As Boolean)` | Called by Validate()/RefreshValidation() after error collection; sets the control's CssClass to the valid/error color per [BR-BIND-001](../../business-rules.md#br-bind-001-error-css-suppression-for-protected-fields), [BR-BIND-002](../../business-rules.md#br-bind-002-gridlist-controls-exempt-from-cell-level-errorvalid-css), and [BR-BIND-003](../../business-rules.md#br-bind-003-multi-line-textbox-error-styling-differs-from-single-line), giving the reader a visual cue of validation state. | `SAIF.Presentation.Web.Binding.Infragistics103` — `clsObjectBinderBase` |
| GetErrors() | `Protected Friend Overridable Sub GetErrors()` | Reads the bound object's IDataErrorInfo.Item(property) during Validate()/RefreshValidation() and appends any non-empty message to ControlErrors, driving both ContainsError and the consolidated error display. | `SAIF.Presentation.Web.Binding.Infragistics103` — `clsObjectBinderBase` |
| GetObjectValueAsString(inBizObject, inPropertyName) | `Function GetObjectValueAsString(inBizObject As Object, inPropertyName As String) As String` | Used by ObjectToControl() to fetch the bound property's current value as display-ready text, applying ObjectPadding/ControlPadding first when UsePadding is enabled. | `SAIF.Presentation.Web.Binding.Infragistics103` — `clsObjectBinderBase` |
| GetObjectValue(inBizObject, inPropertyName) | `Function GetObjectValue(inBizObject As Object, inPropertyName As String) As Object` | Used by ObjectToControl() and type-sensitive binders to fetch the bound property's value in its native CLR type, before any control-specific conversion or formatting. | `SAIF.Presentation.Web.Binding.Infragistics103` — `clsObjectBinderBase` |
| SetObjectValueAsString(inBizObject, inPropertyName, inValue) | `Protected Function SetObjectValueAsString(inBizObject As Object, inPropertyName As String, inValue As String) As Boolean` | Used by ControlToObject() to write a control-derived string back onto the bound property, applying padding/trim rules first when UsePadding is enabled, so the object receives a correctly formatted value. | `SAIF.Presentation.Web.Binding.Infragistics103` — `clsObjectBinderBase` |
| SetObjectValue(inBizObject, inPropertyName, inValue) | `Protected Function SetObjectValue(inBizObject As Object, inPropertyName As String, inValue As Object) As Boolean` | Used by ControlToObject() to write a converted, strongly typed value back onto the bound property, bypassing string formatting for binders that perform their own type conversion. | `SAIF.Presentation.Web.Binding.Infragistics103` — `clsObjectBinderBase` |
| ValidationKey | `Friend Overridable ReadOnly Property ValidationKey As String` | Computed by AddBinder() to key the bound object into m_ValidationObjects per [BR-BIND-006](../../business-rules.md#br-bind-006-validation-key-derivation-for-saif-framework-objects), ensuring repeated Validate() passes re-check the correct distinct object. | `SAIF.Presentation.Web.Binding.Infragistics103` — `clsObjectBinderBase` |
| IsSAIFFrameWorkObject | `Friend Overridable ReadOnly Property IsSAIFFrameWorkObject(Optional inObj As Object) As Boolean` | Detects SAIF framework objects by walking the CLR base-type chain for `clsBusinessBase`/`clsBusinessCollectionBase`. | `SAIF.Presentation.Web.Binding.Infragistics103` — `clsObjectBinderBase` |

## Behavioral notes
- `GetErrors()` first resets existing cell formatting, then checks both collection-level `IDataErrorInfo.Error` text and per-object/per-column `IDataErrorInfo.Item(columnName)` results.
- Invalid cells are painted red directly on matching grid cells, and the first invalid cell in a row is activated for immediate user attention.
- Generic inherited CSS formatting is intentionally not the main error path for this binder because grids are exempt under [BR-BIND-002](../../business-rules.md#br-bind-002-gridlist-controls-exempt-from-cell-level-errorvalid-css); this binder instead tracks row/column locations and colors cells itself.
- `ControlToObject()` walks top-level and child rows, matches each row back to the underlying object by key, and copies editable cell values into browsable, writable properties.

## Constraints and usage notes
- For non-hierarchical grids, `KeyProperty` must resolve to a unique property value shared by the business object and the grid row key cell.
- For hierarchical grids, `HierarchialKeys` must contain a key-property mapping for each child band the binder needs to validate or update.
- Enum-valued object properties are updated by parsing the grid cell text into the runtime enum type before assignment.
- The `FirstRowWithError` and `FirstColumnWithError` properties exist on the public surface, but the in-method assignments are commented out in the current compiled source, so callers should not assume they are populated automatically.

## Sources
- `SAIF.Presentation.Web.Binding.Infragistics103\InfragisticsClassicControls\clsUltraGridBinder.vb`
- `SAIF.Presentation.Web.Binding.Infragistics103\clsObjectBinderbase.vb`
