AddThis Feed Button
AddThis Social Bookmark Button
IMGP1165
IMGP1166
IMGP1143
IMGP1144
IMGP1145
IMGP1146
IMGP1147
IMGP1148
IMGP1149
IMGP1150
Categories

This Month Last Year

Julio 2008
L M X J V S D
« Jun «-»  
 123456
78910111213
14151617181920
21222324252627
28293031  
links
27
Ago

Ocultar columnas de un GridView

Despues de ver esta entrada (http://id4.es/blogs/indigo/archive/2007/08/09/ocultar-columnas-de-un-gridview.aspx) sobre como ocultar columnas de un GridView si que desaparezcan los datos. He estado realizando unas pruebas
y la solucion es mas simple de la que se plantea.

Normalmente nosotros hacemos en ASPNET:

// Creamos las columnas que sea.. bla bla bla .. el diseño bla bla

grid.Columns[0].Visible = false;

// Vinculamos los datos
grid.DataSource = dtt;
grid.DataBind();

Con esto el DataBind no cargara los datos para las columnas que sean Visible=False

Lo mas sencillo para resolver este problema es simplemente, cargar todo el GridView y una vez que tenemos los datos, especificar cuales no queremos mostrar


// Creamos las columnas que sea.. bla bla bla .. el diseño bla bla

grid.DataSource = dtt;
grid.DataBind();
grid.Columns[0].Visible = false;

Simplemente cambiando el orden del DataBind() con respecto a la asignacion de las columnas no visibles hacemos que estas sean no visibles con sus datos.

Que aprobeche!! :P


18
Jun

ASP.NET y la navegación entre páginas

ASP

Cuando trabajamos con ASP.NET lo mas normal es que nuestra aplicación este dividida en mas de un WebForm.
Esto conlleva que en más de una ocasión necesitaremos ir de una página a otra, y para realizar esa "navegación", tenemos opciones claramente diferenciadas:

Server.Transfer(): +1 Sobrecargas

Finaliza la ejecución de la página actual y comienza la ejecución de una nueva página para la solicitud actual.

Response.Redirect(): +1 Sobrecargas

Redirecciona un cliente a una nueva dirección URL. Especifica la nueva URL y si la ejecución de la página actual debe finalizar.

Server.Execute(): +1 Sobrecargas

Ejecuta la solicitud actual utilizando otra página ubicada en la ruta de acceso a la dirección URL especificada.

Los comportamientos de estas tres opciones pueden parecer similares a priori, pero si nos sumergimos un poco más en su funcionamiento veremos en que contexto debe usarse cada una.

Server.Transfer()

Al ejecutar este método se abandonará la página actual y se navegará a la introducida en el parámetro. Al realizarse esta operación, no se mostrará la URL de la nueva pagina, si no que se mantendrá la actual. Lo que "ocultara" de cara al usuario la ubicación de la página en la que se encuentra.

Su característica mas destacada, es que si utilizamos su sobrecarga podemos decirle si va a mandar el conjunto de controles que tenemos en la principal.


Server.Transfer("pagina2.aspx",true)


Si por ejemplo teníamos un formulario con un TextBox en la página principal, ahora podemos acceder al texto que contenía cuando se hizo la navegación. Para ello utilizaremos el nombre o el índice del control (hay que tener en cuenta, que si el control no existe, al intentar obtenerlo devolverá una excepción.):

\r\n


string cadena = Request.Form["NombreControl"];



string cadena = Request.Form[indice];


Otra de las peculiaridades de este método, es que como la redirección conlleva enviar objetos de servidor, no permite redirigir a URL\’s ajenas a la aplicación (como a Google o sucedáneos) ni a URL’s de HTML plano incluso si están incluidas dentro de la aplicación. Por tanto si fuera necesario, deberíamos crear un WebForm.aspx estándar e incluir dentro el HTML que necesitemos.

Response.Redirect()

Al ejecutar este método se abandonará la página actual y se navegará a la página introducida por parámetro, permitiendo además la posibilidad de que se mantenga la ejecución de esa página.

Es decir, ante dos botones con un código como este:


private void btnRedirigir_Click(object sender, System.EventArgs e) {
Response.Redirect("prueba.aspx",false);
Session["nombre"] == “Texto”;
}

private void btnRedirigir2_Click(object sender, System.EventArgs e){
Response.Redirect(”prueba.aspx”);
Session["nombre"] == “Texto”;
}

Al llegar al Page_Load de la página prueba.aspx, veremos que si habíamos pulsado el primer botón, tendremos almacenado en Session["nombre"] la cadena "Texto", mientras que si se utilizó el segundo botón ese objeto de sesión no existe.

Además de esto, se puede utilizar la redirección utilizando las variables por URL (como las $_GET de PHP). Es tan simple como crear la string con esas variables ya incluidas.


string querystring = "prueba.aspx?p=" + variable1.ToString() + "&q=" + variable2.ToString();
Response.Redirect(querystring);


Estas se almacenan en la Request y se puede acceder a ellas fácilmente:


int valor1 = Convert.toInt32(Request.Params["p"]);
int valor2 = Convert.toInt32(Request.Params["q"]);

Al igual que cuando se almacenan objetos en sesión, hay que realizar un casting ya que todo se guarda como object.

Al contrario que el Server.Transfer, este método si permite redirigir a una página externa (como un hipervínculo) y si que se ve la URL de la página al cargarse.

Server.Execute()

Esta es la opción menos recomendada, ya que no redirige físicamente, si no que ejecuta el código de la segunda pagina dentro de la primera. Su uso más habitual se basa en insertar un control de tipo Literal en la página principal, y ejecutar una segunda página a través de un StringWriter (que requiere un añadir un using del namespace System.IO), y que el resultado se almacene en el Literal. Por ejemplo:

StringWriter sw = new StringWriter();
Server.Execute(”prueba.aspx”,sw);
this.Literal1.Text = sw.ToString();

Si en prueba.aspx almacenamos el código de un Input TextBox y un Input Button dentro de un Panel, al ejecutar ese método obtendremos ese mismo conjunto de controles sin tener que ir físicamente a la página.


21
May

Expresiones Regulares

RegEX

Las Expresiones Regulares son patrones que describen conjuntos de cadenas de caracteres sin enumerar sus elementos. Es una herramienta muy útil y es soportada por casi todos los lenguajes de programación, y sistemas operativos.

¿Cuando usar una Expresión Regular? Por ejemplo si necesitáis saber si una cadena de caracteres cumple un patrón determinado: Un teléfono son números separados por guiones, pero no puede tener otro tipo de caracteres. Veamos un ejemplo:

   Cadena: 985-21-21-21

   Patron: (\d{2,3}-\d{2}-\d{2}-\d{2})

Si desglosamos la expresión regular, vemos el metacarácter \d. Esto significa en lenguaje natural "un carácter que sea Dígito Decimal". Justo a continuación se le indica que debe tener un máximo de tres repeticiones y un mínimo de dos.

También puede darse el caso que no se sepa, o no se quiera limitar el número de repeticiones. Para eso están los operadores: + (una, ninguna o infinitas repeticiones), * (al menos una, o infinitas) y ? (ninguna o una pero no mas).

Otros metacaracteres son (hay muchos mas):

   \t - Representa un tabulador.

   \n - Representa la "nueva línea".

   \e - Representa la tecla "Esc" o "Escape" .

   \f - Representa un salto de página .

   \v - Representa un tabulador vertical.

   \d - Representa un dígito del 0 al 9.

   \w - Representa cualquier carácter alfanumérico.

   \s - Representa un espacio en blanco.

   \D - Representa cualquier carácter que no sea un dígito del 0 al 9.

   \W - Representa cualquier carácter no alfanumérico.

   \S - Representa cualquier carácter que no sea un espacio en blanco.

   \A - Representa el inicio de la cadena. No un carácter sino una posición.

   \ - Representa el final de la cadena. No un carácter sino una posición.

Con estos metacaracteres y los operadores, puede conseguirse cualquier patrón, y siempre nos queda la posibilidad de usar el metacárater "." que significa "cualquier carácter".

Otros operadores interesantes son el | (disyunción), ^ (negación o inicio de cadena dependiendo de su uso), $ (fin de cadena).

Vamos a hacer un ejemplo completo. Si tenemos que validar si una cadena podría ser una matrícula de coche valida, tendría que validar las antiguas y las nuevas.

   Matrícula Nueva: 0123-ABC


   Patrón: (\d{4}-[\D\w]{3})

   Matrícula Vieja: AB-0123-CS

   Patrón: ([\D\w]{1,2}-\d{4}-[\D\w]{2})

Ahora la unión de ambas nos dará el patrón final

   (\d{4}-[\D\w]{3}|[\D\w]{1,2}-\d{4}-[\D\\w]{2})

Para utilizar Expresiones Regulares desde PHP, utilizaremos las funciones

ereg(expresion,cadena)

que devuelve bool y

ereg_replace(expresión, sustitución, cadena)

que sustituye las coincidencias por el valor de sustitución.

Desde C# solo tenéis que hacer un

using System.Text.RegularExpressions

y luego declarar un objeto.

Regex regex = new Regex("^(\\d)$");
bool resultado = regex.IsMatch(cadena);

IsMatch devuelve verdadero o falso si la cadena cumple o no la expresion regular con la que se construyo regex.

En un próximo artículo os mostrare un ejemplo práctico de como utilizar estas funciones de Expresiones Regulares con PHP.


19
Abr

ServiceManager beta

PHP
Después de muchos días sin poder postear por diversos motivos (primero router que no sincroniza en días, luego se me murió el O.S. y luego la constante acumulación de trabajo en el curro) vuelvo y con sorpresas.

Acabo de terminar una aplicación (en su primera beta) que os ayudara a gestionar los Services de los Servidores más habituales. En esta primera versión añadí Apache, MySQL (en este articulo tenéis como instalarlo como un servicio, ya que por defecto no lo hace), SQL Server y el IIS.

La aplicación es sencilla y practica. Un icono en la barra de tareas que tiene un menú contextual que carga con las opciones disponibles según los servers que tengáis instalados. Desde ahí podréis detener o iniciar cualquiera de ellos con un simple click.

También incorporé una opción para que arranque automáticamente con Windows si se desea.

Requiere el Framework de .NET ya que esta programado en C# pero podéis bajarlo gratuitamente desde el enlace que os dejo aquí. Si tenéis alguna sugerencia ya sabéis donde encontrarme.

Framework 1.1 : descargar.

ServiceManager : Descargar.


03
Dic

Compilar codigo con .NET

Un ejemplo de como compilar codigo fuente usando .NET

  1. Public Function CompileCommands() As String
  2. ‘ Creamos un compilador, en este caso para VB
  3. Dim compilador As System.CodeDom.Compiler.CodeDomProvider
  4. compilador = VBCodeProvider.CreateProvider(“VB”)
  5. ‘Definimos parametros para compilar
  6. ‘generar en memoria
  7. ‘no generar ejecutable (hacer libreria)
  8. ‘el nombre del ensamblado y de la clase principal
  9. Dim params As New System.CodeDom.Compiler.CompilerParameters()
  10. params.GenerateInMemory = True
  11. params.GenerateExecutable = False
  12. params.OutputAssembly = “commands.dll”
  13. params.MainClass = “command”
  14. params.IncludeDebugInformation = False
  15. ‘ añadimos las referencias que necesitemos
  16. params.ReferencedAssemblies.Add(“referencias.exe”)
  17. ‘ Añadimos los ensamblados del Dominio actual
  18. Dim ASM As System.Reflection.Assembly
  19. For Each ASM In AppDomain.CurrentDomain.GetAssemblies()
  20. params.ReferencedAssemblies.Add(ASM.Location)
  21. Next
  22. ‘ Compilamos, en este caso desde un archivo de codigo fuente,
  23. ‘ con los parametros establecidos anteriormente.
  24. ‘ Nos devuelve una clase con la informacion del resultado de la
  25. ‘ operacion
  26. Dim Results As System.CodeDom.Compiler.CompilerResults
  27. Results = compilador.CompileAssemblyFromFile(params, “commands.vb”)
  28. ‘ Si hay errores creamos una cadena de texto para mostrarlos.
  29. If Results.Errors.Count > 0 Then
  30. Dim Err As System.CodeDom.Compiler.CompilerError
  31. Dim strerr As String = “”
  32. For Each Err In Results.Errors
  33. strerr = strerr & Err.ErrorNumber & “: [" & Err.Line & "] “ & Err.ErrorText & vbCrLf
  34. Next
  35. Return strerr
  36. End If
  37. Return “”
  38. End Function


Entradas siguientes »