sábado, 27 de noviembre de 2010

DropDownList en GridView

en esta oportunidad les voy a postear una solución que le dí a un problema que tenía con el dropdownlist dentro de un gridview, aunque me tomó mucho(para ser rápido) tiempo encontrar esto.

el problema que tenía un gridview, pero las columnas no se generaban automáticamente, porque de hecho un campo era un dropdownlist(nada inofensivo), que me traía el estado de cualquier objeto, en mi caso eran capas geográficas, entonces al cambiar de estado tenía que actualizarme automáticamente el registro con el nuevo estado.

bueno sin más chamullo, entramos a ver el código.

No publico código completo porque no viene al caso, pero eso si aqui mi campo que contiene el dropdownlist

Lo primero que debemos de agregar es la propiedad autopostback al dropdownlist y ponerle a true para que automáticamente vaya al servidor, cuando cambiemos de estado.

Además debe de agregarse el evento OnSelectedIndexChanged=”evento_a_ejecutar”

Ahora viene como haremos que al cambiar de estado se ejecute ese evento del onselectedindexchanged??

Bueno para ello nos vamos al codebehind de la página y programamos el evento “evento_a_ejecutar”

protected void evento_a_ejecutar(object sender, EventArgs e)
{
GridViewRow gvr = (GridViewRow)(((Control)sender).NamingContainer);
string fileState = ((DropDownList)gvr.FindControl("ddlEstado")).SelectedValue;
//ahora ya tenemos el valor del dropdownlist y podemos hacer lo que queramos con el, por ejemplo actualizar, para ello sólo tendríamos que obtener el id de dicho registro.
}

Entonce el truco está en convertir el objeto sender en control y este a su vez en un gridview a traves de su propiedad NamingContainer, luego simplemente nos queda buscar los controles que pueda contener el gridview en dicha fila donde ocurrió el evento del dropdownlist.
Pudimos haber simplificado también de esta forma

string fileState = ((DropDownList)sender).SelectedValue;

pero yo necesitaba buscar otros controles en dicha fila del gridview.

Crear una clave SHA1 como la generada por FormsAuthentication.HashPasswordForStoringInConfigFile

Private Function GenerateSHA1(ByVal nombre As String) As String
Dim enc As New UTF8Encoding
Dim data() As Byte = enc.GetBytes(nombre)
Dim result() As Byte
Dim sha As New SHA1CryptoServiceProvider
result = sha.ComputeHash(data)
Dim sb As New StringBuilder
For i As Integer = 0 To result.Length - 1
If result(i) < 16 Then sb.Append("0") End If sb.Append(result(i).ToString("x")) Next Return sb.ToString.ToUpper End Function