---
title: SAIF.Presentation.Web.Controls.AJAX.Infragistics103 business rules
summary: Enumerated business rules with per-rule trigger, enforcement, and outcomes.
status: draft
owner: SAIF documentation generator
last_reviewed: 2026-08-17
library: SAIF.Presentation.Web.Controls.AJAX.Infragistics103
reference_type: package
---

# SAIF.Presentation.Web.Controls.AJAX.Infragistics103 business rules

This page captures business rules enforced by this library. This library defines no explicit validation/authorization rules of its own — its auto-binding controls are a generic UI mechanism that surfaces business rules owned by other libraries, and its grid customizer enforces a small set of configuration/UI rules.

## BR-AJAX-001: Auto-bound controls display validation errors sourced from the bound object's IDataErrorInfo

| Field | Value |
| --- | --- |
| **Statement** | An auto-binding control (`AutoBindTextbox`, `AutoBindWebDateTimeEdit`, `AutoBindWebMaskEdit`) is considered invalid whenever `CType(BoundObject, IDataErrorInfo).Item(BindProperty)` returns a non-empty string; the control renders a red background and the message is appended to the page's `LblErrorMsg` control.* |
| **Trigger** | `Validate()` invoked after `DataBind()` (if `AutoValidateOnDataBind`) or after a value is written back via `BindToObject()` (if `AutoValidate`). |
| **Enforcement** | `AutoBindControlAncestor.GetErrorMessages()` / `AutoBindControlAncestor.Validate()` (`AutoBindControlAncestor.vb`). |
| **Outcome** | Visual error indication only; this library does not itself define what constitutes invalid data — that is determined entirely by the bound business object's own `IDataErrorInfo` implementation**, which resides outside this project. |
| **Source** | `SAIF.Presentation.Web.Controls.AJAX.Infragistics103\AutoBindControlAncestor.vb` |

---

## BR-AJAX-002: "Always visible" and "always hidden" grid columns cannot be toggled by the end user

| Field | Value |
| --- | --- |
| **Statement** | Columns configured with `VisiblityModes.AlwaysVisible` or `AlwaysHidden` are excluded from user-driven visibility changes; only columns in `VisiblityModes.Normal` respond to checkbox selections in `InfragisticsGridCustomizer.Update`/`LoadColumnPreferences`.* |
| **Trigger** | Grid customizer initialization (`New InfragisticsGridCustomizer(inTargetGrid, inAlwaysVisibleColumnKeys, inAlwaysHiddenColumnKeys)`) with `inAlwaysVisibleColumnKeys`/`inAlwaysHiddenColumnKeys` parameters supplied by the hosting page/control declaration (`ModalGridCustomizer.ColumnVisiblity`). |
| **Enforcement** | `InfragisticsGridCustomizer.InitializeColumnList`, `LoadColumnPreferences`, `Update`, `ManipulateGrid` (`InfragisticsGridCustomizer.vb`). |
| **Outcome** | `AlwaysVisible` columns are always rendered as visible and their checkbox is disabled (`li.Enabled = c.VisibilityMode <> VisiblityModes.AlwaysVisible`); `AlwaysHidden` columns never appear in the checkbox list at all and are forced to `ServerOnly = True`. |
| **Source** | `SAIF.Presentation.Web.Controls.AJAX.Infragistics103\InfragisticsGridCustomizer.vb` |

---

## BR-AJAX-003: Grid column-visibility override keys must exist on the target grid

| Field | Value |
| --- | --- |
| **Statement** | Any column key listed in `AlwaysVisibleColumns`/`AlwaysHiddenColumns` must correspond to an actual column on the target `UltraWebGrid`.* |
| **Trigger** | `InfragisticsGridCustomizer` construction. |
| **Enforcement** | `ValidateColumnVisibilitySettings` throws `ApplicationException` with a message identifying the target grid and the missing column key (`InfragisticsGridCustomizer.vb`). |
| **Outcome** | Hard failure (unhandled exception) rather than silent ignoring — a misconfiguration surfaces immediately during control initialization. |
| **Source** | `SAIF.Presentation.Web.Controls.AJAX.Infragistics103\InfragisticsGridCustomizer.vb` |

## Notes
- `clsHelpText`/`clsHelpTextCollection` are read-only reference-data lookup objects: no `IsValid()`/`AddErrorMessage()` business-rule enforcement was found in either class, and their `CreateSQL`/`InsertSQL`/`UpdateSQL`/`DeleteSQL` properties throw `ApplicationException(BOC.Messages.InvalidSQLProperty)` rather than defining executable SQL — see [database tables](database-tables.md) for details.

## Related documentation
- [Index](index.md)
- [Overview](overview.md)
- [Architecture](architecture.md)
- [Dependencies](dependencies.md)
- [Operations and processes](operations-processes.md)
- [Database tables](database-tables.md)
- [Control catalog](control-catalog.md)
- [SQL catalog](sql/index.md)
- [API reference](api/index.md)

> **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.AJAX.Infragistics103\AutoBindControlAncestor.vb`
- `SAIF.Presentation.Web.Controls.AJAX.Infragistics103\InfragisticsGridCustomizer.vb`
- `SAIF.Presentation.Web.Controls.AJAX.Infragistics103\clsHelpText.vb`
- `SAIF.Presentation.Web.Controls.AJAX.Infragistics103\clsHelpTextCollection.vb`
