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

# ModalGridCustomizer

`ModalGridCustomizer` is the designer-facing control that gives an `UltraWebGrid` end-user column/page-size customization. It wires together an internal (assembly-`Friend`) `GridCustomizationPanel` popup body, a toolkit `ModalPopupExtender`, and an [InfragisticsGridCustomizer](InfragisticsGridCustomizer.md) that holds and persists the actual state; the control itself owns the designer-property surface (target grid, column overrides, binding behavior) and the event handlers that react to the popup's OK/Apply/Save-as-Default actions. ([BR-AJAX-021](../../business-rules.md#br-ajax-021-grid-customization-state-is-created-once-per-grid-per-model-and-reused))

## Purpose
- Resolves or creates a per-grid `InfragisticsGridCustomizer` on first load and reuses it across postbacks, so column/page-size state survives round trips for the life of the page's model. ([BR-AJAX-021](../../business-rules.md#br-ajax-021-grid-customization-state-is-created-once-per-grid-per-model-and-reused))
- Wires the internal `GridCustomizationPanel` popup to a toolkit `ModalPopupExtender` targeting a caller-supplied trigger image, presenting the column checkbox list and optional page-size editor as a modal dialog.
- Applies the user's OK/Apply choices to the grid for the session, or persists them as the model's default preferences on Save-as-Default, depending on which button the user clicks. ([BR-AJAX-037](../../business-rules.md#br-ajax-037-confirming-the-popup-applies-choices-for-the-session-only), [BR-AJAX-039](../../business-rules.md#br-ajax-039-only-save-as-default-persists-grid-preferences))
- Lets the consumer choose how the grid rebinds after customization — via the object binder, native `DataBind`, or a fully custom page handler — through the `BindingBehaviors` setting. ([BR-AJAX-038](../../business-rules.md#br-ajax-038-the-rebind-strategy-after-customization-is-chosen-by-the-consumer))

## Context
- Namespace: `SAIF.Presentation.Web.Controls.V2.AJAX`
- Assembly/package: `SAIF.Presentation.Web.Controls.AJAX.Infragistics111` (packaged in `SAIF.BOF.Presentation.Web.Infragistics111`)
- Base class: [SAIFAJAXControlAncestor](SAIFAJAXControlAncestor.md)
- Collaborates with the assembly-internal (`Friend`) `GridCustomizationPanel`, which renders the popup body and raises `AfterRender`, `OKButtonClicked`, `BindGrid`, and `OnSavePreferences` back to this control. Because `GridCustomizationPanel` is not publicly accessible, it is not documented as a separate API page; its behavior is described here and in [Customize grid columns via the modal popup](../../operations/customize-grid-columns-via-the-modal-popup.md).

## Public members
| Member | Signature | Purpose |
| --- | --- | --- |
| `TargetControls.GridId` | `Property TargetControls.GridId As String` | ID of the `UltraWebGrid` this instance customizes |
| `TargetControls.ObjectBinderId` | `Property TargetControls.ObjectBinderId As String` (default `objBinder`) | ID of the `clsObjectBindManager` used to rebind the grid when `BindingBehavior = ObjectBinder` |
| `TargetControls.LinkedRefreshControlID` | `Property TargetControls.LinkedRefreshControlID As String` (default `""`) | ID of a WARP refreshed by Apply; empty hides the Apply button ([BR-AJAX-036](../../business-rules.md#br-ajax-036-the-apply-button-is-offered-only-when-an-async-refresh-target-is-configured)) |
| `ColumnVisiblity.AlwaysVisibleColumns` | `Property ColumnVisiblity.AlwaysVisibleColumns As String` (default `""`) | Semicolon-delimited grid column keys the user can never hide ([BR-AJAX-028](../../business-rules.md#br-ajax-028-always-visible-or-always-hidden-columns-cannot-be-changed)) |
| `ColumnVisiblity.AlwaysHiddenColumns` | `Property ColumnVisiblity.AlwaysHiddenColumns As String` (default `""`) | Semicolon-delimited grid column keys the user can never reveal ([BR-AJAX-028](../../business-rules.md#br-ajax-028-always-visible-or-always-hidden-columns-cannot-be-changed), [BR-AJAX-032](../../business-rules.md#br-ajax-032-always-hidden-columns-are-not-offered-to-the-user)) |
| `ControlPaging` | `Property ControlPaging As Boolean` (default `False`) | Whether this customizer controls the grid's page size and forces paging on ([BR-AJAX-022](../../business-rules.md#br-ajax-022-a-saved-page-size-overrides-the-designed-page-size-when-the-customizer-controls-paging), [BR-AJAX-041](../../business-rules.md#br-ajax-041-customizer-controlled-paging-is-always-switched-on)) |
| `BindingBehavior` | `Property BindingBehavior As BindingBehaviors` (default `ObjectBinder`) | Chosen rebind strategy after customization ([BR-AJAX-038](../../business-rules.md#br-ajax-038-the-rebind-strategy-after-customization-is-chosen-by-the-consumer)) |
| `GridCustomizer` | `ReadOnly Property GridCustomizer As InfragisticsGridCustomizer` | Resolves (creating if absent) the model's per-grid customizer instance keyed by `TargetControls.GridId` ([BR-AJAX-021](../../business-rules.md#br-ajax-021-grid-customization-state-is-created-once-per-grid-per-model-and-reused)) |
| `OnInitialize` | `Event OnInitialize` | Declared public event that is never raised anywhere in this library's live source* |
| `BindGrid` | `Event BindGrid` | Raised to rebind the target grid after customization, per `BindingBehavior` ([BR-AJAX-038](../../business-rules.md#br-ajax-038-the-rebind-strategy-after-customization-is-chosen-by-the-consumer)) |

### Nested types

| Type | Kind | Purpose |
| --- | --- | --- |
| `ColumnVisibilityOverride` | Nested property class | Groups `AlwaysVisibleColumns` and `AlwaysHiddenColumns` under `ColumnVisiblity` |
| `TargetControlIDData` | Nested property class | Groups `GridId`, `ObjectBinderId`, and `LinkedRefreshControlID` under `TargetControls` |
| `BindingBehaviors` | Enum (`ObjectBinder`, `DataBind`, `Custom`) | Selects the rebind strategy applied by `CustomizationPanel_BindGrid` ([BR-AJAX-038](../../business-rules.md#br-ajax-038-the-rebind-strategy-after-customization-is-chosen-by-the-consumer)) |

## Inherited public members

Members in this section are inherited from `SAIFAJAXControlAncestor` in `SAIF.Presentation.Web.Controls.AJAX.Infragistics111`. They are available on this type through inheritance.

| Member | Signature | Purpose | Origin |
| --- | --- | --- | --- |
| `RootObject` | `ReadOnly Property RootObject As Object` | The hosting page's `Model` property value | `SAIF.Presentation.Web.Controls.AJAX.Infragistics111` — `SAIFAJAXControlAncestor` |
| `IsFirefox` | `ReadOnly Property IsFirefox As Boolean` | Browser-capability test for the current request | `SAIF.Presentation.Web.Controls.AJAX.Infragistics111` — `SAIFAJAXControlAncestor` |

## Behavioral notes
- `MGC_`-prefixed preference-key constants are declared on this class but never used; the actual persisted preference keys come from `InfragisticsGridCustomizer`'s `IGC_` constants. Whether these are leftovers from an earlier design is unknown.**
- `OnInitialize` is declared but never raised — consumers cannot currently hook into initialization through this event.*
- The default icon `/Resources/Images/DefaultModalGridCustomizer.gif` is used when no image is configured for the trigger, mirroring `HoverHelp`'s default-image pattern. ([BR-AJAX-043](../../business-rules.md#br-ajax-043-default-help-and-customizer-icons-are-served-from-fixed-resource-paths))

## Constraints and usage notes
- `TargetControls.GridId` must reference a real `UltraWebGrid` on the page; a missing target grid or missing object binder throws `ApplicationException` from the respective reflection property.*
- The default image path `/Resources/Images/DefaultModalGridCustomizer.gif` is a hosting-environment contract that consuming applications must publish. ([BR-AJAX-043](../../business-rules.md#br-ajax-043-default-help-and-customizer-icons-are-served-from-fixed-resource-paths))
- `BindingBehavior = Custom` requires the hosting page to handle the `BindGrid` event itself; otherwise the grid is not rebound after customization. ([BR-AJAX-038](../../business-rules.md#br-ajax-038-the-rebind-strategy-after-customization-is-chosen-by-the-consumer))

## Related documentation
- [Index](../../index.md)
- [Overview](../../overview.md)
- [Architecture](../../architecture.md)
- [Business rules](../../business-rules.md)
- [Operations and processes](../../operations-processes.md)
- [API reference](../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.Infragistics111/ModalGridCustomizer.vb`
- `SAIF.Presentation.Web.Controls.AJAX.Infragistics111/GridCustomizationPanel.vb`
