Mostrando entradas con la etiqueta .NET. Mostrar todas las entradas
Mostrando entradas con la etiqueta .NET. Mostrar todas las entradas

jueves, 10 de octubre de 2013

Mensajes de aplicación en .NET (Windows Forms)

Muchas veces nos ha pasado que tenemos que establecer un valor global para toda la aplicación, ejemplo de ello son los títulos de los formularios, valores como el IGV, tipo de cambio, direcciones de la web service, cadenas de conexión a la base de datos, direcciones IP, etc.

Un tip de una buena práctica es usar ficheros XML para almacenar dichos valores. Este tipo de fichero brinda valores a la aplicación y tiene la ventaja de que no necesita ser compilado, es decir, basta editar el fichero y listo!, no se necesita compilar nuevamente y publicar la web.

Bueno, ya ahora vamos con el código:

Primero, lo primero, añadimos un archivo de configuración:


Ahora que ya tenemos el archivo de configuración, la forma para leer un valor dentro de este archivo "app.config" es la siguiente:



Todos los valores del archivo de configuración se leer como String, es decir si definimos un valor Entero o Real, posteriormente lo tenemos que parsear.

Espero les sea de gran ayuda este tip, a mi me facilitó la instalación de mi aplicación porque muchas veces tenía que cambiar el ip del servidor y con esto ya no tuve que compilar mi aplicación para cambiarlo.


miércoles, 9 de octubre de 2013

Controles de servidor NO, HTML + JQuery Si!

Los que programamos en .NET aplicativos web, vemos que en .NET vienen controles de servidor ya hechos como son el dropdownlist, gridview, etc.

Lo primero que pienso: "Oh todo ya viene hecho!, que fácil se me va hacer la vida".
Es cierto es fácil, pero a la hora que el usuario que interactúe y vea realmente como funcionan esos componentes dirá algo como: "Porqué se recarga la página, está muy lento, no me gusta...."

Es por ello que la tendencia ahora es programar todo con JQuery y dejar de lado los controles de servidor previamente mencionados:

Se los pongo de otro modo:

Caso A: DropDownList

El evento IndexChanged de un DropDownList, para activarse, debe llamar a un postback (AutoPostBack="True", y regrescar toda la página, pero al hacer esto no solo estamos golpeando la rapidez del sistema, sino que afectamos a otros componentes en el postback.

Es mejor usar una etiqueta <select> con la opción runar="server" y posteriormente programar su evento de cambio con JQuery.

<select id="midropdownlist" runat="server">

$( "#midropdownlist" ).change(function() {
  //Hacer mi lógica
});

*La propiedad runat="server" sirve para que en el codebehind podamos asignarle valores a este control:

Public Sub PonValor()
    midropdownlist.Items.Add("Opción 1")
    midropdownlist.Items(0).Value="1"
    midropdownlist.Items.Add("Opción 2")
    midropdownlist.Items(1).Value="2"
En Sub

Caso B: GridView

Al igual que un dropdownlist, el evento index changed depende de la ejecución de un postback. El reemplazo de éste sería una etiqueta <table>.

<table id="mitabla">
    <tr>
      <td>
        Hola, Soy una columna
      </td>
    </tr>
</table>

Para este caso, la librería de JQuery que uso es la siguiente: https://datatables.net/

Permite con poco código generar tablas dinámicas desde lado del cliente, su uso es totalmente simple y muy configurable.

Si además de lo anteriormente mencionado añadimos los efectos de JQuery y su control multinavegador, vemos que es una mejor opción en cuanto a calidad de software.

Recuerden que para hacer valer nuestro trabajo hay que esforzarnos para diferenciarnos del resto.

Saludos.


martes, 8 de octubre de 2013

Establecer conexión entre MySQL y .NET (Ejemplo VB)

MySQL ? con .NET ?

¿Para qué voy a saber cómo conectar MySQL con .NET si éste está diseñado para trabajar mejor con SQL Server?

Bueno pueden googlear las ventajas y desventajas de usar un motor de bases de datos u otro. Pero en el momento en que le digas al cliente el costo extra por el motor de BD (En caso que no lo tuviera) creeme que apoyará el software libre y te dirá algo como: "Mi base de datos no es muy grande, usa el pequeño MySQL".

Bueno en todo caso, les voy a dejar la clase que uso para establecer la conexión….
Ah pero antes necesitan instalar las librerías del mysql para .NET en:


Bien, también tendrán que agregarle la referencia:




Ahora sí, les dejaré mi clase (la cual no es exactamente oh que prodigio!, pero sirve):

Imports MySql.Data.MySqlClient
Imports Model
Public Class Conexion
    Public coneccion As MySql.Data.MySqlClient.MySqlConnection
    Public comando As MySql.Data.MySqlClient.MySqlCommand
    Public data As System.Data.DataSet
    Public adaptador As MySql.Data.MySqlClient.MySqlDataAdapter
    Public conectado As Boolean = False
    Public Sub New()
        coneccion = New MySql.Data.MySqlClient.MySqlConnection
        adaptador = New MySql.Data.MySqlClient.MySqlDataAdapter
        comando = New MySql.Data.MySqlClient.MySqlCommand
        data = New System.Data.DataSet
        adaptador.DeleteCommand = Nothing
        adaptador.InsertCommand = Nothing
        adaptador.SelectCommand = Nothing
        adaptador.UpdateCommand = Nothing
        comando.Connection = Nothing
        comando.Transaction = Nothing
        data.DataSetName = "El Dataset"
        Try
            coneccion.ConnectionString = "server=localhost;user=root;database=salesforge;port=3306;password=1234;"
            coneccion.Open()
            comando.Connection = coneccion
            conectado = True
        Catch ex As Exception
            MsgBox("No se puede conectar a la base de datos : " + ex.Message)
            conectado = False
        End Try
    End Sub
    Public Function consulta(ByVal q As String) as DataSet
        Try
            data.Tables.Clear()
            data.Clear()
            comando.CommandText = q
            adaptador.SelectCommand = comando
            adaptador.Fill(data)
        Catch ex As Exception
            MsgBox("Error en consulta: " + q)
        End Try
        return data
    End Sub
    Function ejecuta(ByVal q As String) As Boolean
        Try
            comando.CommandText = q
            Return comando.ExecuteNonQuery()
        Catch ex As Exception
            MsgBox("Error al ejecutar: " + q + "," + ex.Message)
            Return False
        End Try
    End Function
End Class