miércoles, 5 de junio de 2013

Crear controles de usuario (.ascx) dinámicamente o hacerle Cast desde el code behind

Cuando creamos un control de usuario (.ascx) a veces es necesario hacerle un Cast desde el code behind de la página, para crearlos dinámicamente o simplemente para buscarlo y cambiarle las propiedades de manera dinámica, este es el ejemplo de cómo se realiza en Cast: Primero en el archivo .aspx donde vamos a usar el control, agregamos la referencia por medio de la siguiente linea:
 
<%@ Register src="MiControlUsuario.ascx" tagname="MiControlUsuario" tagprefix="uc1" %>
 
        //Como ejemplo, vamos a buscar el control de usuario creado con la línea anterior, 
        //para hacer el Cast usamos en namespace ASP. 
        //Para este caso en particular buscamos el ClientID y se lo asignamos a una variable.
        String vClientId = ((ASP.micontrolusuario_ascx)Page.FindControl("MiControlUsuario1")).ClientID;

        //También podríamos crear dinámicamente un nuevo control y agregarlo, de la siguiente manera:
        ASP.micontrolusuario_ascx vNuevoControlDinamico = new ASP.micontrolusuario_ascx();
        vNuevoControlDinamico.ID = "MiControlGeneradoDinamicamente";
        Page.Controls.Add(vNuevoControlDinamico);

Leer archivos que contengan tildes o acentos

Es normal que debamos leer archivos que contiene texto con tildes o acentos, para que la lectura sea correcta y no se transformen en caracteres especiales podemos usar el siguiente código:
 
        //Aqui colocamos la ruta del archivo que vamos a leer
        String vRutaArchivo = @"C:\miArchivo.txt";
        //Usamos un StreamReader, en este caso recibe dos parámetros, el primero es la ruta del archivo y el segundo es la codificación con la cual lo vamos a leer
        //Para que reconozca las tildes es necesario colocarle la codificación por defecto

        using (StreamReader vStreamReader = new StreamReader(vRutaArchivo, System.Text.Encoding.Default))
        {
            //Aqui leemos todo el contenido del archivo y lo colocamos en una variable
            String vContenidoArchivo = vStreamReader.ReadToEnd();
        }

martes, 14 de mayo de 2013

Cambiar codificación de archivo de texto a Unicode

Con el siguiente fragmento de código es posible cambiarle la codificación a Unicode a un archivo de texto:
 
     try
        {
            String vTemp = "";
            using (StreamReader sr = new StreamReader(@"C:\Prueba.txt"))
            {
                vTemp = sr.ReadToEnd();
 
            }
            using (StreamWriter sw = new StreamWriter(@"C:\Prueba.txt", false, Encoding.Unicode))
            {
                sw.Write(vTemp);
            }
        }
        catch (Exception ex)
        {
            //aqui si algo sale mal, el ex.Message tiene la informacion del mensaje
        }

domingo, 26 de agosto de 2012

Obtener tamaño de una imagen en c#

La siguiente función permite obtener el tamaño de una imagen, recibe un parámetro tipo char, para determinar si el tamaño se retorna en bytes, kilobytes o megabytes.
 

    public long ObtenerTamanoImagen(System.Drawing.Image vImage, char vMedida)
    {
        long vTamano = 0;
        long vTamanoBytes;
        if (vImage != null)
        {
            using (MemoryStream vMemoryStream = new MemoryStream())
            {
                vImage.Save(vMemoryStream, ImageFormat.Png);
                vTamanoBytes = vMemoryStream.Length;
                switch (vMedida)
                {
                    case 'b':
                        vTamano = vTamanoBytes;
                        break;
                    case 'k':
                        vTamano = vTamanoBytes / 1204;
                        break;
                    case 'm':
                        vTamano = vTamanoBytes / 1024 / 1024;
                        break;
                }
            }
        }
        return vTamano;
    }

Cambiar tamaño de una imagen en c#

La siguiente función permite cambiar el tamaño de una imagen, guardando la calidad de la misma.
 
        public Image CambiarTamanoImagen(Image pImagen, int pAncho, int pAlto)
        {
            //creamos un bitmap con el nuevo tamaño
            Bitmap vBitmap = new Bitmap(pAncho, pAlto);
            //creamos un graphics tomando como base el nuevo Bitmap
            using (Graphics vGraphics = Graphics.FromImage((Image)vBitmap))
            {
                //especificamos el tipo de transformación, se escoge esta para no perder calidad.
                vGraphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
                //Se dibuja la nueva imagen
                vGraphics.DrawImage(pImagen, 0, 0, pAncho, pAlto);
            }
            //retornamos la nueva imagen
            return (Image)vBitmap;
        }

miércoles, 25 de abril de 2012

Agregar líneas en los ejes de las graficas, Reporting Services

Agregar líneas en los ejes de las graficas, a veces es necesario agregar líneas en los ejes de la grafica que nos permitan marcar un valor determinado a la grafica. El siguiente ejemplo explica cómo hacerlo en Reporting Services 2008: La grafica que se va a usar de ejemplo muestra la cantidad de animales así:
Vamos a agregar una línea que recorra la grafica en sentido horizontal, mostrando el límite permitido, para hacerlo seguimos los siguientes pasos: 1. Seleccionamos el eje Y:
2. Vamos a las propiedades del eje Y y buscamos la propiedad StripLines:
3. En las propiedades cambiamos los siguientes campos: • En la propiedad BorderColor seleccionamos el color de la línea • En la propiedad BorderStyle seleccionamos el tipo de línea • En la propiedad IntervalOffSet seleccionamos el valor al cual aparecerá la línea Así:
Aceptamos los cambios y al ejecutar el reporte ahora lucirá así:
El valor en el cual sale la línea (Para este ejemplo 4), puede ser cambiado o asignado por medio de un parámetro o con los resultados de una consulta.

lunes, 16 de abril de 2012

Uso de la clase StringBuilder

Dentro de .Net, los objetos String siempre tienen una longitud determinada, cada vez que se realizan operaciones sobre cadenas se crea una nueva cadena con el resultado de la operación, cuando se efectúan múltiples operaciones sobre las mismas el rendimiento puede verse afectado. En estos casos para evitar que se afecte el rendimiento se puede usar la clase StringBuilder, que contiene las siguientes operaciones:

 
        //Se crea el StringBuilder con el valor inicial
        StringBuilder vStringBuilder = new StringBuilder("Cadena Inicial:");
        //Contenido del StringBuilder: Cadena Inicial:
        //Con el método Append se agrega al final del valor inicial
        vStringBuilder.Append(" Sumando a la cadena.");
        //Contenido del StringBuilder: Cadena Inicial: Sumando a la cadena.
        //Con el método Remove se eliminan caracteres de la cadena
        vStringBuilder.Remove(0, 16);
        //Contenido del StringBuilder: Sumando a la cadena.
        //Con el método Replace se remplazan caracteres o subcadenas completas
        vStringBuilder.Replace("Sumando", "Restando");
        //Contenido del StringBuilder: Restando a la cadena.