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.
sábado, 27 de noviembre de 2010
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
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
viernes, 7 de agosto de 2009
Generador de Códigos en php
hoy navegando un rato por la red, me encontré con algo interesante como phpobjectgenerator.
pues genera la clase automáticamente, además de las tablas, para que prueben uds mismos les dejo el link.
http://www.phpobjectgenerator.com/
pues genera la clase automáticamente, además de las tablas, para que prueben uds mismos les dejo el link.
http://www.phpobjectgenerator.com/
jueves, 6 de agosto de 2009
Bucles en php
Después de responder este post, pude comprobar lo que ignoraba(ya que vengo programando bastante tiempo), todo este tiempo.
Bueno yendo al asunto en efecto, pude comprobar que sucede lo que afirma maycolalvarez
Textualmente
argy comento esto(adicionando a lo que ya habían comentado)
"y además que una variable que se declara dentro de un ciclo termina cuando el ciclo(valga la redundancia ) termina, es decir que la variable existe sólo dentro del ciclo"
maycolalvarez
"No, esto no aplica para php, el ámbito de variables de php sólo se restringe para los bloques de función, no para los ciclos, como resultado toda variable declarada dentro de un ciclo puede accederse fuera de éste, caso contrario de las variables superglobales, que tienen ámbito en todo el script.
En cambio si declaras una variable en el script, en las funciones del mismo script no tendrán acceso a la variable, sino que la re-declararán, a menos que se utilice la palabra global:
Código PHP:
$mivariable="valor principal";
function metodouno(){
echo 'uno:'.$mivariable; //no imprimirá NADA
}
function metododos(){
global $mivariable;
echo 'dos:'.$mivariable; //imprimirá "valor principal"
}
metodouno();
metododos();
esto ocurre porque php no requiere la declaración explícita de variables y no tiene restricción de tipos (sólo PHP5 al paso de parámetros de clases, pero no una restricción de tipos completa)”
argy
"mmmmm??? a ver si te entendi y si me entendiste, una variable declarada dentro de un bucle while, sólo exisitirá dentro del bucle es decir dentro while($i<100){//sólo aqui, pe $var}, ahora me dices que a $var podré acceder desde fuera del while verdad????. como???
por teoría de ámbito de las variables sé que la variable $var existirá sólo dentro de ese bucle while, entonces si me pierdo de algo como imprimo el contenido de esa variable fuera del bucle???, a menos que yo le haya declarado antes del while."
maycolalvarez
“Lo que te explique anteriormente sólo es para PHP, haz la prueba e inventa para que veas, esto no pasaría con C#, ni con java, por eso hay que tener un poco de cuidado con php.
Tu teoría del ámbito es 100% correcta, pero No aplica para php.
y sí, $var tendrá el último valor asignado al terminar el ciclo, prueba y verás, es mejor cuando uno realiza sus propias pruebas ”
pero aquí hay un detalle que cuando configuro el error a E_ALL|E_STRICT
Código PHP:
while($i<10)
{
$j+=$i;
$i++;
}
echo $j;
//aqui de hecho me imprime 45 (CORRECTO).
//PERO
//si no se declara el contador $i y $j, tenemos el siguiente mensaje
//Notice: Undefined variable: i in D:\Web\agp\index.php on line 3
//Notice: Undefined variable: i in D:\Web\agp\index.php on line 5
//Notice: Undefined variable: j in D:\Web\agp\index.php on line 5
//Notice: Undefined variable: i in D:\Web\agp\index.php on line 6
//si no declaramos $j
//Notice: Undefined variable: j in D:\Web\agp\index.php on line 5
?>
Código PHP:
echo '
';
//ahora si declaramos los dos
$k=0;
$m=0;
while($k<10)
{
$m+=$k;
$k++;
}
echo $m;
//imprime el mismo 45 (CORRECTO), pero no nos muestra ningún mensaje más que preocupe.
?> Comprobé realmente sucede lo que afirma maycolalvarez , pero con las salvedades que ya pueden observar, desde mi punto de vista puedo decir que es mejor hacerlo de la segunda forma.
Bueno yendo al asunto en efecto, pude comprobar que sucede lo que afirma maycolalvarez
Textualmente
argy comento esto(adicionando a lo que ya habían comentado)
"y además que una variable que se declara dentro de un ciclo termina cuando el ciclo(valga la redundancia ) termina, es decir que la variable existe sólo dentro del ciclo"
maycolalvarez
"No, esto no aplica para php, el ámbito de variables de php sólo se restringe para los bloques de función, no para los ciclos, como resultado toda variable declarada dentro de un ciclo puede accederse fuera de éste, caso contrario de las variables superglobales, que tienen ámbito en todo el script.
En cambio si declaras una variable en el script, en las funciones del mismo script no tendrán acceso a la variable, sino que la re-declararán, a menos que se utilice la palabra global:
Código PHP:
$mivariable="valor principal";
function metodouno(){
echo 'uno:'.$mivariable; //no imprimirá NADA
}
function metododos(){
global $mivariable;
echo 'dos:'.$mivariable; //imprimirá "valor principal"
}
metodouno();
metododos();
esto ocurre porque php no requiere la declaración explícita de variables y no tiene restricción de tipos (sólo PHP5 al paso de parámetros de clases, pero no una restricción de tipos completa)”
argy
"mmmmm??? a ver si te entendi y si me entendiste, una variable declarada dentro de un bucle while, sólo exisitirá dentro del bucle es decir dentro while($i<100){//sólo aqui, pe $var}, ahora me dices que a $var podré acceder desde fuera del while verdad????. como???
por teoría de ámbito de las variables sé que la variable $var existirá sólo dentro de ese bucle while, entonces si me pierdo de algo como imprimo el contenido de esa variable fuera del bucle???, a menos que yo le haya declarado antes del while."
maycolalvarez
“Lo que te explique anteriormente sólo es para PHP, haz la prueba e inventa para que veas, esto no pasaría con C#, ni con java, por eso hay que tener un poco de cuidado con php.
Tu teoría del ámbito es 100% correcta, pero No aplica para php.
y sí, $var tendrá el último valor asignado al terminar el ciclo, prueba y verás, es mejor cuando uno realiza sus propias pruebas ”
pero aquí hay un detalle que cuando configuro el error a E_ALL|E_STRICT
Código PHP:
while($i<10)
{
$j+=$i;
$i++;
}
echo $j;
//aqui de hecho me imprime 45 (CORRECTO).
//PERO
//si no se declara el contador $i y $j, tenemos el siguiente mensaje
//Notice: Undefined variable: i in D:\Web\agp\index.php on line 3
//Notice: Undefined variable: i in D:\Web\agp\index.php on line 5
//Notice: Undefined variable: j in D:\Web\agp\index.php on line 5
//Notice: Undefined variable: i in D:\Web\agp\index.php on line 6
//si no declaramos $j
//Notice: Undefined variable: j in D:\Web\agp\index.php on line 5
?>
Código PHP:
echo '
';
//ahora si declaramos los dos
$k=0;
$m=0;
while($k<10)
{
$m+=$k;
$k++;
}
echo $m;
//imprime el mismo 45 (CORRECTO), pero no nos muestra ningún mensaje más que preocupe.
?> Comprobé realmente sucede lo que afirma maycolalvarez , pero con las salvedades que ya pueden observar, desde mi punto de vista puedo decir que es mejor hacerlo de la segunda forma.
Etiquetas:
ámbito de variables en php,
while
Suscribirse a:
Entradas (Atom)