jueves, 14 de mayo de 2009
Enlazar un enumerado a un Dropdownlist c#
En muchas ocasiones en nuestras aplicaciones definimos enumerados para hacer un manejo mas eficiente de los datos, muchas veces queremos mostrarlos en un combo para que el usuario seleccione. Para hacer esto podemos enlazar el enumerado al control DropdownList
public enum MiEnumerado
{Lunes,Martes,Miercoles}
MiDropDownList.DataSource = Enum.GetNames(typeof(MiEnumerado));
MiDropDownList.DataBind();
Para acceder al valor seleccionado podriamos hacerlo de la siguiente manera:
MiEnumerado miEnun = (MiEnumerado)Enum.Parse(typeof(MiEnumerado),MiDropDownList.SelectedValue);
De esta forma tenemos el valor seleccionado en forma de enumerado nuevamente.
martes, 12 de mayo de 2009
Ciclo de vida de una pagina Asp.Net
Saber que control ha provocado el Postback
En algunas ocasiones nos gustaria saber control ha provocado la recarga (postback) de la página para esto podemos hacerlo de dos formas dependiendo de si es una recarga parcial (ajax) o un postaback total de la pagina.
1.-Si es una recarga parcial de la pagina
//obtenemos la página actual
Page page = (HttpContext.Current.Handler as Page);
//mediante el Scriptmanager accedemos al control que ha hecho la recarga parcial de la misma
string ctrlname = ScriptManager.GetCurrent(page).AsyncPostBackSourceElementID;
Control control = page.FindControl(ctrlname);
2.-Si es una recarga total
ctrlname = page.Request.Params["__EVENTTARGET"];
Esto funciona conrrectamente con casi todos los controles pero No con Botones, esto es debido a que los botons cuando se pintan en html no llaman a la función __doPostBack de Javascript y por tanto __EVENTTARGET nunca va a tener valor, para conseguir esto os dejo un enlace en el que muestran como conseguirlo para todo tipo de controles. Es un articulo muy útil de Ryan Farely.
Determining the Control that Caused a PostBack
lunes, 11 de mayo de 2009
TreeView SelectedNodeStyle no funciona sin Postback
Después de pasar un buen rato trabajando con el control Treview de asp.net (la version 2.0 del control, con la uno este problema no existe) me surgio un problema que con el que no contaba, el árbol que yo estaba generando no hacia postback cuando se producia un click en uno de los nodos, este que a priori no deberia suponer un problema, lo es cuando queremos personalizar el estilo del nodo seleccionado, en esta situación no se aplicaba el estilo. Esto se puede hacer de forma declarativa medienta las propiedades SelectNodeStyle.
<"asp:treeview id="arbolListines" runat="server" backcolor="Aqua" bordercolor="Black" bold="true" >
Para que el estilo sea reconocido de forma correcta debemos añadir la siguiente propiedad al control Treeview:
Target="_self"
De esta forma conseguiemos que funcione correctamente.
Acceder a un control dentro de un ContentPlaceHolder desde JavaScript
Un pequeño problema a la hora de usar las MasterPage es que al introducir controles dentro de los ContentPlaceHolder, el ClientId de estos controles aparece modificado, se le añade un prefijo con el nombre de su contenedor (ContentPlaceHolder). Esto solo nos afecta si queremos acceder a estos controles desde el cliente (javascript) .
Un ejemplo seria un TextBox con el Id = txtNombre, este apareceria en nuestro codigo html como
ctl00_ContentPlaceCuerpoPagina_txtNombre La solución fácil seria acceder usando el nombre completo document.getElementById("ctl00_ContentPlaceCuerpoPagina_txtNombre").value Esto seria poco elegante y ademas peligroso, ya que si en algun momento se cambia el nombre del ContentPlaceHolder,esa sentencia ya no seria valida. Una forma efectiva de acceder al control seria. document.getElementById('<%=txtNombre.ClientID %>').value
jueves, 23 de octubre de 2008
Seleccionar un item en un DropDownList por código
Aunque en un principio esta tarea nos pueda parecer algo trivial, no es tan sencillo. Para poder seleccionar un item del DropDownList conocido su valor deberemos concatener dos operaciones de búsqueda
DropDownList1.SelectedIndex = DropDownList1.Items.IndexOf(DropDownList1.Items.FindByValue(miValor));
En una primera operación se realiza una búsqueda por el valor que teniamos previamente (FindByValue) el resultado de esta operación es un elemento del tipo ListItem, una vez tenemos el item en cuestion solo tenemos que aplicarle el método IndexOf que nos devolvera su posición dentro del DropDownList.
Etiquetas:
.net,
asp.net,
c#,
DropDownList,
visual studio
jueves, 25 de septiembre de 2008
Evento RowCreated del Gridview, modificar el aspecto del grid
Estos ultimos dias me ha surgido la necesidad de modificar la forma en la cual se muestra un gridview y a continuación mostrare una forma en la que podemos realizar esta tarea. Las modificaciones las haremos a traves del evento RowCreated del control GridView, este evento se dispara cada vez que se crea una nueva fila, de esta forma podemos modificar el aspecto de cada una de las celdas a nuestro gusto. El siguiente codigo muestra un ejemplo
protected void tablaPedidos_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
if (this.numeroPedido == null)
this.numeroPedido = ((Pedidos)(e.Row.DataItem)).numeroPedido;
else
if (this.numeroPedido == ((Pedidos)(e.Row.DataItem)).numeroPedido)
{
TableCell tc = e.Row.Cells[2];
tc.Attributes["styles"] = "border:0";
}
else
this.numeroPedido = ((Pedidos)(e.Row.DataItem)).numeroPedido;
}
}
Aunque el código habla por si mismo, ahora vamos a comentar algunas de las lineas claves para entender este ejemplo.
if (e.Row.RowType == DataControlRowType.DataRow)
En esta linea comprobamos que sea una fila, para no realizar este tratamiento sobre la cabecera ni el pie del grid
((Pedidos)(e.Row.DataItem)).numeroPedido;
En nuestro caso el Grid se carga con una coleccion de objetos de tipo Pedido, asi que accedemos a las propiedades del objeto para saber si tenemos que hacer alguna modificacion en la fila
TableCell tc = e.Row.Cells[2];
tc.Attributes["styles"] = "border:0";
De esta forma accedemos a la celda que esta en la posición 3 de la nueva fila que hemos creado y le decimos que elimine el borde.
En resumen el evento RowCreated es bastante útil cuando queremos modificar la el aspecto de la fila que se esta creando o de alguna de sus celdas.
Saludos!
Suscribirse a:
Entradas (Atom)
