Foros del Web » Programación para mayores de 30 ;) » .NET »

Actuar en el DataGrid según el dato de la bd

Estas en el tema de Actuar en el DataGrid según el dato de la bd en el foro de .NET en Foros del Web. Hola a tod@s: Estoy haciendo una web en ASP.NET C# sobre un videoclub (trabajo con la versión anterior a la 2005 del Visual Studio). En ...
  #1 (permalink)  
Antiguo 15/03/2007, 06:02
Avatar de zacktagnan  
Fecha de Ingreso: abril-2005
Mensajes: 501
Antigüedad: 19 años, 1 mes
Puntos: 3
Actuar en el DataGrid según el dato de la bd

Hola a tod@s:

Estoy haciendo una web en ASP.NET C# sobre un videoclub (trabajo con la versión anterior a la 2005 del Visual Studio).
En uno de los apartados de la parte administración de la web, saco un listado de las películas existentes a través de un DataGrid, llamado listPelis_DG, que se carga por medio de un DataSet.

Los elementos que saco en el DataGrid, por cada fila resultante de la consulta SQL sobre la tabla PELICULAS, son el código de la película, la imagen del cartel de la película, el título de la película, el director y el año, y luego los enlaces que permiten modificar ó eliminar el registro.

Si en determinado momento, no hubiera registros en la tabla PELICULAS de la base de datos, muestro una frase indicando que en esos momentos no hay películas y no relleno el DataGrid.

Este es el código de adm_modelm_p.aspx.cs
Código:
private void Page_Load(object sender, System.EventArgs e)
{
	...

	if (!Page.IsPostBack) 
	{
		cargar_Listado();//llamada solo la primera vez
	}
}

public void cargar_Listado()
{
	conexion.Open();
	string sql = "SELECT * FROM PELICULAS ORDER BY peli_id";
	SqlDataAdapter comando = new SqlDataAdapter(sql, conexion);
	DataSet ds = new DataSet();
	comando.Fill(ds,"tabla_AdmListPelis");
	int num_TOT_Pelis = ds.Tables["tabla_AdmListPelis"].Rows.Count;
	if (num_TOT_Pelis <= 0)
	{
		noHayPelis = "En estos momentos, no hay ninguna pel&iacute;cula registrada.";
	}
	else
	{
		listPelis_DG.DataSource = ds.Tables["tabla_AdmListPelis"].DefaultView;
	}
	listPelis_DG.DataBind();
	conexion.Close();
}

En la parte HTML del adm_modelm_p.aspx, el DataGrid está construído tal que así (el div es para el caso en el que no haya películas en la base de datos ):
Código:
<div id="noHayRegistros"><p><%=noHayPelis%></p></div>
<asp:DataGrid id="listPelis_DG" CellPadding="5" CssClass="admDataGrid" runat="server" AllowPaging="True" AutoGenerateColumns="False" DataKeyField="peli_id" PageSize="2">
	<AlternatingItemStyle BackColor="#D9FF66"></AlternatingItemStyle>
	<ItemStyle CssClass="elementoTabla"></ItemStyle>
	<HeaderStyle CssClass="encabezadoTabla"></HeaderStyle>
	<Columns>
		<asp:HyperLinkColumn Target="_self" DataNavigateUrlField="peli_id" DataNavigateUrlFormatString="adm_modpeli.aspx?idpeli={0}" DataTextField="peli_id" HeaderText="[+]"></asp:HyperLinkColumn>
		<asp:TemplateColumn HeaderText="Cartel">
			<ItemTemplate>
				<div align="center">
				<a href="adm_modpeli.aspx?idpeli=<%# DataBinder.Eval(Container.DataItem, "peli_id")%>" title="<%# DataBinder.Eval(Container.DataItem, "peli_tit")%>"><img alt="<%# DataBinder.Eval(Container.DataItem, "peli_tit")%>" src="imags/pelis/<%# DataBinder.Eval(Container.DataItem, "peli_cartel")%>" style="border: 0; width: 64px"></a>
				</div>
			</ItemTemplate>
		</asp:TemplateColumn>
		<asp:BoundColumn DataField="peli_tit" HeaderText="T&iacute;tulo" ItemStyle-Font-Bold="True"></asp:BoundColumn>
		<asp:BoundColumn DataField="peli_direc" HeaderText="Director"></asp:BoundColumn>
		<asp:BoundColumn DataField="peli_anio" ReadOnly="True" HeaderText="A&ntilde;o"></asp:BoundColumn>
		<asp:EditCommandColumn ButtonType="LinkButton" UpdateText="Actualizar" HeaderText="Cambios" CancelText="Cancelar" EditText="<img alt=&quot;Modificar&quot; src=&quot;imags/modif.png&quot; name=&quot;ico_modif&quot; id=&quot;ico_modif&quot; width=&quot;16&quot; height=&quot;16&quot; border=&quot;0&quot; onMouseOver=&quot;window.status=' •  Modificar Este Registro  •';return true;&quot; onMouseOut=&quot;window.status='';return true;&quot;>"></asp:EditCommandColumn>
		<asp:TemplateColumn HeaderText="Eliminar">
			<ItemTemplate>
				<div align="center">
					<asp:linkbutton id="Elim_Regis" runat="server" CommandName="Delete">
						<img src="imags/elim.png" alt="Eliminar" onclick="return elimRegis();" name="ico_elim" id="ico_elim" width="16" height="16" border="0" onMouseOver="window.status=' •  Eliminar Este Registro  •';return true;" onMouseOut="window.status='';return true;">
					</asp:linkbutton>
				</div>
			</ItemTemplate>
		</asp:TemplateColumn>
	</Columns>
	<PagerStyle HorizontalAlign="Center" Mode="NumericPages"></PagerStyle>
</asp:DataGrid>

En estas columna del DataGrid es dónde muestro la imagen del cartel de la peícula recorrida en el listado:
Código:
		<asp:TemplateColumn HeaderText="Cartel">
			<ItemTemplate>
				<div align="center">
				<a href="adm_modpeli.aspx?idpeli=<%# DataBinder.Eval(Container.DataItem, "peli_id")%>" title="<%# DataBinder.Eval(Container.DataItem, "peli_tit")%>"><img alt="<%# DataBinder.Eval(Container.DataItem, "peli_tit")%>" src="imags/pelis/<%# DataBinder.Eval(Container.DataItem, "peli_cartel")%>" style="border: 0; width: 64px"></a>
				</div>
			</ItemTemplate>
		</asp:TemplateColumn>
Lo que me gustaría conseguir es que en los casos en los que la película, por determinada razón, no tuviera asociada una imagen de cartel, en esa casilla saliera una imagen tipo predetermianda indicando eso (Sin imagen). Es decir que cuando en la tabla PELICULAS el campo [peli_cartel] del registro recorrido es vacío, en vez de que se cague un cuadro sin imagen (como cuando el navegador no encuentra la imagen), se muestre una imagen tipo indicada para ese caso...

Yo esto en ASP lo hago fácilmente con un if (si hay imagen) se muestra la imagen else se muestra una imagen tipo dentro del bucle que construye el listado a mostrar, pero aquí no sé como hacerlo...

Espero se haya entendido mi consulta.

¿¿Alguien sabría decirme como conseguir lo que intento hacer???
__________________
Saludos,

zacktagnan.
=================================================
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 08:41.