CRUD con DevExpress ASPxGridView: combo para llaves foráneas y checkbox para 0/1
Qué vamos a lograr
Una página Articulos.aspx con una grilla que:
- Lista, crea, edita y borra artículos (CRUD completo con
SqlDataSource, sin escribir código de acceso a datos). - Muestra el impuesto con un selector (combo) que enseña el nombre (
TAX_NOMBRE) en vez delTAX_ID. - Muestra el campo
FAVORITO(entero 0/1) como checkbox.
Requisitos previos
- ASP.NET WebForms (VB) con DevExpress 13.2 instalado.
- Dos tablas en SQL Server:
Paso 1 — Cadena de conexión y registro de DevExpress (Web.config)
En <connectionStrings>:
Asegúrate de tener registrados los ensamblados de DevExpress en <system.web><compilation><assemblies> y el módulo ASPxHttpHandlerModule en <httpModules>/<system.webServer><modules> (esto normalmente lo agrega la plantilla de DevExpress al crear el proyecto).
Paso 2 — La página completa Articulos.aspx
Nota clave: arriba se registran dos namespaces con el prefijo dx (uno para el grid y otro para los editores, que es donde vive el combo/checkbox).
El code-behind Articulos.aspx.vb queda vacío (todo lo resuelve el SqlDataSource):
Cómo funciona cada truco
1) El combo para la llave foránea (GridViewDataComboBoxColumn)
ValueField="TAX_ID"→ el valor real que se guarda enArticulos(el ID).TextField="TAX_NOMBRE"→ lo que ve el usuario (el nombre).ValueType="System.Int32"→ imprescindible para que el valor entre correcto al parámetro@TAX_ID(Int32).DropDownStyle="DropDownList"→ obliga a elegir de la lista.- En modo lectura, la grilla traduce sola
TAX_ID → TAX_NOMBRE.
2) El checkbox para 0/1 (GridViewDataCheckColumn)
- Como el campo es entero (no
bit), hay que decirle qué es "marcado" y "desmarcado":ValueChecked="1",ValueUnchecked="0",ValueType="System.Int32".
- Si hubiera
NULL, el checkbox se ve gris (indeterminado); puedes agregarAllowGrayed="False".
Errores comunes
- "Etiqueta de servidor 'dx:...' desconocida" → falta registrar el namespace correcto arriba con
<%@ Register %>. - El combo guarda vacío o falla al actualizar → casi siempre es que falta
ValueType="System.Int32".
Comentarios
Publicar un comentario