En este artículo voy a explicar como enlazar un elemento de un datalist o un datagrid a datos.
Partamos de la base de que tenemos un datalist, que deseamos que incluya una imagen y una etiqueta debajo con el nombre de la imagen.

Hay que destacar previamente que los datos se obtendrán de una base de datos, entonces enlazaremos el DataList a través de su propiedad datasource con un dataset.

El dataset puede ser rellenado por ejemplo con una sentencia SQL del estilo a:

SELECT nombre,url FROM imagenes

Después de tener rellenado el dataset, invocaremos el método dataBind() del datalist Después de añadir a nuestro diseñador el DataList, pulsamos con el botón derecho sobre el elemento recién añadido y seleccionamos: Editar plantilla -> Plantillas de Elementos

Posteriormente introducimos un elemento de tipo Image en la zona de ItemTemplate que es la zona que será visible cuando se cargue el datalist. En la propiedad databindings del control Image, crearemos una expresión de enlace personalizada a través de la cual podremos indicarle de qué campo del dataset (y a su vez de la base de datos) debe tomar la url. Introduciremos la siguiente expresión de acuerdo con la sentencia SQL anteriormente creada:
databinder.eval(container.dataitem,"url") -> De esta forma le diremos al datalist que la dirección de la cual debe obtener la imagen es esa.

Con la etiqueta que debe tener el nombre de la imagen, realizaremos algo parecido, solo que en la parte de databindings del control label, generaremos una expresión de enlace personalizada para el campo text de la siguiente manera:

  • Pulsamos sobre la propiedad databindings de la etiqueta.
  • Seleccionamos la propiedad Text.
  • Activamos la opción Expresion de enlace personalizada.
  • Escribimos la siguiente expresión: databinder.eval(container.dataitem,"nombre")

Entonces ya estamos en condiciones de invocar el anteriormente comentado método del datalist databind que va a provocar que se rellene el control y se visualicen las imágenes con sus respectivos nombres.

Quizá te interese...