Archive for the 'ASP.Net 2.0' Category

Inicio la mudanza.

Mientras busco un buen servicio de hosting y un lindo nombre de dominio, estoy diseñando mi propio Blog/Sitio o lo quesea. La idea es basar todo en .Net y XML o SQL Server. Probablemente use primero el dasBlog que está basado en .Net 1.1 y de a poco vaya haciendo mi propio sistema de blog en ASP.Net 2.0.

Por eso es probable que hasta que inaugure mi nuevo “sitio” escrba sólo ocacionalmente aquí.

De todas formas por el tráfico que tengo no creo que me extrañen mucho 🙂

Saludos

Formateo de cadenas en VB.Net

El Framework de .Net incluye una forma muy completa de dar formato a cadenas de caracteres a través del método Format de la clase String.

El método recibe una cadena especial llamada “cadena de formato” que describe en detalle como queremos que se vea la cadena de caracteres que queremos mostrar.

Por ejemplo:

Dim strCadena1 As String
Dim strCadena2 As = "cadenas"
Dim strCadena3 As = "VB.Net"
strCadena1 = String.Format("Formateo de {0} en {1}", _
strCadena2, strCadena3)

Este ejemplo produce tres cadenas y las une mediante el método String.Format. En este caso el método reemplaza {0} y {1} por las variables que le pasamos como parámetros. El resultado será la cadena: “Formateo de cadenas en VB.Net”.

El método String.Format acepta parámetros de cualquier tipo.

Dim strCadena1 As String = "vale"
Dim dblNumero As Double = 25.32
Dim strCadena2 As String = String.Format( _
"El libro {0} ${1}", strCadena1, dblNumero)

El resultado es: “El libro vale $25.32”.

Formateo de parámetros numéricos

Veamos el siguiente ejemplo:

Dim pi As Double = Math.PI * 1000
Dim strCadena1 As String = String.Format( _
"PI= {0:c}, {0:F5}, {0:e4}", pi)

Este fragmento de código produce el siguiente resultado:

“PI= $3,141.59, 3141.59265, 3.1416e+003”

Para entender el significado de los códigos de las cadenas de formato veamos la siguiente tabla:

Especificador Descripción Ejemplo Resultado
 C, c         Moneda       {0:c}   $31,415.90
 D, d         Decimal      {0:d}   31415
 E, e         Científica   {0:e3}  3.142e+004
 F, f         Fixed-point  {0:f3}  3.142e+004
 G, g         General      {0:g}   31415.9
 N, n         Número       {0:n}   31415.9
 X, x         Hexadecimal  {0:x}   7AB7

 

Todos los especificadores aceptan números de punto flotante excepto el decimal y el hexadecimal que sólo aceptan enteros.

En una entrada posterior vamos a ver como dar formato a fechas y horas.

Saludos, 8)

Manejo de Cadenas en VB.Net: 1ra. parte.

Los Creadores del BASICUno de los puntos fuertes de VB.Net, que en realidad es uno de los puntos fuertes de todas las versiones de BASIC desde la primera creada en 1963 en el Dartmouth College, es el manejo de strings. La cantidad de funciones de VB.Net para su manipulación es enorme. Es cierto que al compartir el framework C# y otros lenguajes basados en .Net tienen métodos similares. Pero muchos que pueden llegar a ser completamente nuevos para un programador que viene de C o C++, son viejos conocidos de los programadores que venimos de VB o anteriores.

He aquí la primera parte de un pequeño resumen de las principales funciones y métodos de manipulación de strings en VB.Net.

Declarar e inicializar un string

Hay dos formas de hacerlo:

Dim s As String
s = "Esta es una cadena de caracteres" 

o bien:

Dim s As String = "Esta es una cadena de caracteres" 

Concatenar strings

En VB.Net, a combinar dos strings se le llama concatenar. Se pueden usar los símbolos & o +.

Dim s1 As String = "VB"
Dim s2 As String = ".Net"
Dim s3 As String = s1 & s2 

Esto produce como resultado en s3 “VB.Net”.

Convertir Strings

Para convertir un valor numérico a una cadena tenemos el método ToString:

Dim i As Integer = 37
Dim s As String = i.ToString()

Además cuando un valor numérico es usado en una concatenación, VB.Net lo convierte automáticamente:

Dim s As String = "El valor de i es " & i

Otras funciones útiles

Entra las funciones más útiles, que sobreviven de las primeras versiones de BASIC, tenemos:

Len(s) : Devuelve la longuitud de un string.
Mid(s,j,i) : Devuelve un substring de s de i caracteres a partir de la posición j inclusive. Tambien se puede usar para reemplazar una posición determinada en uns string haciendo Mid(s,3,1) = “*”. Esta sentencia pone un * en la posición 3 del string.
Replace(s,”*”,”#”) : Reemplaza en todo el string los * por #.
Instr(s,s2) : Busca la primer ocurrencia de s2 dentro de s y devuelve un entero con su posición. Opcionalmente se puede usar Instr(i,s,s2) donde i es un entero que indica a partir de que posición dentro del string se empieza la búsqueda. Si no encuentra nada devuelve 0.

En la segunda parte veremos el poderoso método Format de la clase String para formatear strings, valores numéricos y fechas.

Saludos. 8)

El Path de la aplicación en ASP.Net

Aquellos que venimos tirando del carro desde VB 6.0 o antes, en algún momemto extrañamos la propiedad Path del objeto App. Para los nostálgicos, aquí va una función que puede reemplazara a App.Path:

 
Function App_Path() As String     
  Return System.Appdomain.Currentdomain.Basedirectory     
End Function

Podemos usarla fácilmente, por ejemplo, para abrir un archivo de texto en nuestra aplicación:

stLector = filArchivo.OpenText(App_Path & "miapp/archivo.txt") 
While stLector.Peek  -1 
    strLine = stLector.ReadLine() 
End While

Saludos.

Archivos en VB.Net

Aunque nos resistimos a reconocerlo, jamás vamos a deshacernos de ellos. De una forma u otra casi siempre necesitamos usar un archivo de texto en nuestras aplicaciones.

En ASP.Net para leer y escribir archivos de texto plano debemos incluir el espacio de nombres System.IO y utilizaremos Streams y el objeto File.

En particular los métodos más útiles del objeto File son:

  • CreateText (<NombreArchivo>)

  • AppendText (<NombreArchivo>)

  • OpenText (<NombreArchivo>)

que se utilizan para crear un archivo, agregar datos al final y abrirlo para leerlo respectivamente.

Leer un archivo

Para leer un archivo debemos asociar un StreamReader al mismo usando el método OpenText() de la siguiente forma:

Dim Lector as StreamReader = File.OpenText(“C:\datos.txt”)

Una vez que tenemos nuestro StreamReader usaremos para leer el archivo los siguientes métodos:

  • ReadLine()

  • ReadToEnd()

Ambos métodos devuelven un tipo string. El método ReadLine() devuelve todos los caracteres hasta encontrar un fin de línea. ReadToEnd() devuelve un string conteniendo todo el archivo.

Una vez que terminamos con el archivo, hay que cerrarlo usando el método Close() del Stream.

Escribir un archivo

Los métodos CreateText() y AppendText() del objeto File devuelven un StreamWriter asociado al archivo que queremos escribir.

Los métodos para escribir en el archivo son:

  • Write (<string que queremos escribir>)

  • WriteLine (<string que queremos escribir>)

La diferencia entre ambos métodos es que WriteLine() inserta un fin de linea al final del string que estamos escribirendo en el archivo.

Aquí va un pequeño ejemplo para escribir y leer el contenido de un archivo de texto.

Archivo Default.aspx.vb

Option Explicit On
Imports System.IO

Partial Class _Default Inherits System.Web.UI.Page

  Protected Sub Button1_Click(ByVal sender As Object,  _ 
                    ByVal e As System.EventArgs) 
                    Handles Button1.Click
    ‘Abre un archivo para escritura.
    Dim objEscritor As StreamWriter objEscritor = _
                                  File.AppendText(“C:\salida.txt”)  
    ‘Escribe en el archivo el contenido del TextBox.
    objEscritor.Write(TextBox1.Text) 
  
    ‘Cierra el archivo.
    objEscritor.Close()
  End Sub

  Protected Sub Button2_Click(ByVal sender As Object, _ 
                          ByVal e As System.EventArgs) 
                          Handles Button2.Click
    ‘Abre el Archivo para lectura.
    Dim objLector As StreamReader objLector = _ 
                                    File.OpenText(“C:\salida.txt”)
    ‘Lee el contenido y lo vuelca al TextBox 
    TextBox1.Text = “”
    TextBox1.Text = objLector.ReadToEnd()
    ‘Cierra el archivo.
    objLector.Close()
  End Sub
End Class


Archivo Default.aspx.

<%@ Page Language=”VB” AutoEventWireup=”false”
     CodeFile=”Default.aspx.vb” Inherits=”_Default” %>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN”
   “
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”
http://www.w3.org/1999/xhtml”>
<head runat=”server”>
  <title>Escribir/Leer archivos</title>
</head>
<body>
  <form id=”form1″ runat=”server”> 
    <div>
      <asp:TextBox ID=”TextBox1″ runat=”server”
         BorderStyle=”Ridge” Height=”133px” 
         TextMode=”MultiLine” Width=”317px”>
      </asp:TextBox>
      <br /> <br />
      <asp:Button ID=”Button1″ runat=”server” 
               Height=”25px” Text=”Escribir”
               Width=”75px” /> 
      <asp:Button ID=”Button2″ runat=”server”
               Height=”25px” Text=”Leer”
               Width=”75px” />
    </div>
  </form>
</body>
</html>

En otra entrada usaremos otros métodos y Server.MapPath para controlar exactamente dónde guardamos el archivo o de dónde lo leemos.¡A tener en cuenta! Es posible que el ejemplo de un error de autorización al intentar escribir el archivo. Esto se debe a que la cuenta de usuario ASPNET debe tener los permisos apropiados sobre la carpeta donde queremos guardar nuestro archivo.

Saludos.

ASP.Net 2.0: web.config

El archivo web.config de una aplicación ASP.Net es extremadamente importante. Si bien podemos modificarlo manualmente con cualquier editor de texto, los más conveniente es hacerlo con la Herramienta Administración de sitios Web a la que se accede desde el menú Sitio Web, opción Configuración de ASP.Net de Visual Studio 2005.

Saludos.

.Net 2.0: El control Wizard

Apenas volví de mis vacaciones me encontré en el apuro de hacer rápidamente un programa que perimitiera a un usuario importar y exportar al mismo tiempo determinada información desde y hacia el sistema corporativo de la empresa. Al ser una aplicación para usuarios finales y no gente de sistemas, pensé en una interface tipo “asistente”. En .Net 1.x tendría que haber hecho variás páginas permitiendo seleccionar opciones y pasar a la siguiente. Pero en .Net 2.0 tenemos el control Wizard que permite programar una aplicación del tipo “asistente” en muy poco tiempo. El control tiene una sintáxis muy sencilla pero muy potente permitiendo controlar varios aspectos. Aquí describo sólo los que utilicé en mi aplicación:

<asp:Wizard ID=”Wizard1″ runat=”server”
     Height=”200px” Width=”400px”
     DisplaySideBar=”false”
     HeaderText=”Título del Asistente”
     HeaderStyle-Font-Size=”Large”
     ActiveStepIndex=”0″
     BorderStyle=”Double”
     BorderColor=”Blue” BorderWidth=”3px”>
  <asp:WizardStep ID=”WizardStep0″ runat=”server” 
       Title=”Inicio de Proceso” StepType=”Start”>
      <b>Inicio de Proceso</b> <br /><br />
  </asp:WizardStep>
  <asp:WizardStep ID=”WizardStep1″ runat=”server”
       Title=”Segundo Paso” StepType=”Step”
      AllowReturn=”false”>
     <b>Segundo Paso</b> <br /><br />
     <asp:Label ID=”Label1″ runat=”server”>
     </asp:Label>
     <br/><br/>
  </asp:WizardStep>
  <asp:WizardStep ID=”WizardStep4″ runat=”server”
        Title=”Finalización del Proceso”
        StepType=”Finish” AllowReturn=”true”>
        <b>Fin del Proceso</b>
        <br/><br/>
  </asp:WizardStep>
  </WizardSteps>
</asp:Wizard>

Algunas propiedades para destacar son: DisplaySideBar: “true” muestra una barra lateral con todos los pasos del asistente, permitiendo sleccionar cualquiera de ellos. Un valor “false” oculta esta barra. StepType: indica que tipo de “paso” corresponde para cada uno de los que componen el asistente. Con el valor “auto”, el control decide el tipo de paso de acuerdo a su posición dentro del asistente. El valor “start” indica que es el primer paso del asistente y “finish” que es el último paso. Los pasos intermedios se indican con “step”. AllowReturn: “false” hace que el asistente no permita que se vuelva al paso anterior. Entre los tags <asp:WizardStep> y </asp:WizardStep> podemos agregar todos los controles que necesitemos para llevar a cabo la función de cada paso. Luego el código correspondiente a cada paso se escribe generalmente en el evento ActiveStepChanged, que se declara de la siguiente manera:

Protected Sub Wizard1_ActiveStepChanged (ByVal sender As Object, _ 
                   ByVal e As  System.EventArgs) Handles  
                   Wizard1.ActiveStepChanged 
  ‘———————————–
  ‘ Código para procesar cada paso del
  ‘ asistente.  
  ‘———————————– 
End Sub

El proceso se puede hacer identificando cuál es el paso activo y actuando en consecuencia con una estructura del tipo Select Case:

Select Case Wizard1.ActiveStepIndex
  Case 0
    ‘Instrucciones necesarias 
    ‘para procesar el primer paso
  Case 1
    ‘Instrucciones necesarias
    ‘para procesar el segundo paso
    Label1.Text = “Segundo paso.”
  Case 3
    ‘Instrucciones necesarias
    ‘para procesar el último paso
End Select

Como puede verse el control es muy simple de usar, muy flexible y ofrece muchísimas posibilidades para simplificar las interfaces de usuario del tipo “asistente”.

Saludos.