martes, 28 de octubre de 2014

Tipos de Datos en .NET

Tipos de datos para .Net y sus alias en Visual Basic y C#


Class Library Name
Vb Name
C# Name
Contains




Byte
Byte
byte
Entero de 0 a 255.
Int16
Short
short
Entero de -32,768 a 32,767.
Int32
Integer
int
Entero de -2,147,483,648 a 2,147,483,647.
Int64
Long
long
Entero de -9.2e18 a 9.2e18
Single
Single
float
Punto flotante de simple precisión de aproximadamente -3.4e38 a 3.4e38.
Double
Double
double
Punto flotante de doble precisión de aproximadamente -1.8e308 a 1.8e308.
Decimal
Decimal
decimal
Numero fraccional de punto fijo de 128-bits que soporta encima de 28 dígitos significativos.
Char
Char
char
Un simple carácter de 16-bits
String
String
string
Serie de caracteres de longitud variable.
Boolean
Boolean
bool
Un valor de falso o verdadero.
DataTime
Date
--
Representa alguna fecha de Enero 1ero 12:00:00 AM del año 1  a Diciembre 31, 11:59:59 del año 9999.
TimeSpan
--
--
Representa un valor de tiempo, tanto en 3 segundos o 3 días.
Object
Object
object
La  ultima clase base de todos los tipos de NET. Puede contener algún dato de tipo objeto.

Colores en .NET

Existen 4 formas para definir un color en .NET
  • Usando un valor ARGB(alpha, red, green,blue):
    • ctrl.ForeColor = Color.FromARGB(255,0,255,0);
  • Usando un color .NET Predefinido:
    • ctrl.ForeColor = Color.Crimson;
  • Usando un nombre HTML:
    • ctrl.ForeColor=ColorTranslator.FromHTML("Blue");
  • Usando un valor Hexadecimal en el formato #<red><green><blue>:
    • <asp:TextBox Forecolor="#FF50FF" Text="Test" ID="txtTestColor" runat="server" />

NOTA: alpha representa la transparencia (255=opaco).

Eventos de los controles web

  • Click:
    • Button, ImageButton.
  • TextChanged:
    • TextBox (Se dispara solo cuando el usuario cambia el foco a otro control).
  • CheckChanged:
    • CheckBox, RadioButton.
  • SelectedIndexChanged:
    • DropDownList, ListBox, CheckBoxList, RadioButtonList.
NOTA: Para capturar estos eventos la propiedad AutoPostBack debe estar en true.

Desplegar un mensaje de estado en nuestra página web usando Master Pages

Frecuentemente deseamos ofrecer a nuestros usuarios retroalimentación cuando estos usan nuestras páginas. La forma más usual de hacer esto es usar la barra de estado del explorador Web. Pero como existen muchos eventos que pueden modificar este mensaje y que no estan bajo nuestro control, preferimos usar una caja de texto o una etiqueta en el Master Page de nuestra aplicación y la llamamos desde cualquier página de contenido.
La forma de hacer esto es:
  • Agregar la directiva MasterType para poder acceder a las propiedades de la página Maestra en las páginas en que queramos mostrar un mensaje de estado.
    • Ejemplo <%@ MasterType VirtualPath="~/lesslearn.master" %>
Con esto ya podremos usar esta barra de estado solo poniendo en la propiedad StatusMessage el texto que deseamos desplegar y llamando al método DisplayMessage() de nuestra página maestra.
Ejemplo:
   Master.StatusMessage = "Aqui estoy";
   Master.DisplayMessage();
Cuando necesitemos que el mensaje desaparezca solo llamamos al método HideStatusBar().

como agregar una columna a una DataSet

DataSet dsBom = new DataSet(); //ITEM, PART#, DESC, QTY
CreateDataSet cdsBom = new CreateDataSet();

DataColumn dcEqty = new DataColumn("Eqty");
dsBom.Tables[0].Columns.Add(dcEqty); //agregando la columna dcEqty

//SE LE AGREGA UN DATO A LA NUEVA COLUMNA EN ESTE CASO "1565" dsBom.Tables[0].Rows[0]["Eqty"] = 1565;

Formas de pasar datos entre páginas web

Existen diferentes formas de pasar datos entre formas en la web. Sabemos que el protocolo http no guarda el estado (stateless), asi que los datso deben ser guardados en alguna parte. A diferencia del ASP tradicional en ASP.NET existen diferentes vias para hacerlo:
  1. Query String.
  2. Cookies.
  3. Variables de sesión.
  4. Cross Page Posting.
  5. Submit Form.
  6. Server.Transfer o Server.Execute.
1.- QueryStrings: Para pasar el contenido de TextBox1.Text de WebForm1 a Webform2 en el evento click de Button1.
   Para enviarlo:
   protected void Button1_Click(object sender, EventArgs e)
                   {
                        Response.Redirect("WebForm2.aspx?id=" + TextBox1.Text);
                   }
   Para recibirlo:

   string queryStringID = Request.QueryString["id"];
2.- Cookies
Para guardar el valor de TextBox1.Text en una cookie:
   protected void Button1_Click(object sender, EventArgs e)
                            {
                               HttpCookie cookie = new HttpCookie("UserName");
                               cookie.Value = TextBox1.Text;
                               cookie.Expires = DateTime.Now.AddDays(1);
                               Response.Cookies.Add(cookie);
                               Response.Redirect("WebForm2.aspx");
                             }

Para leerla:

   if(Request.Cookies["UserName"] != null)
                             Response.Write(Request.Cookies["UserName"].Value);
3.- Variables de Sesión:

   Para poner el valor del TextBox1.Text en una variable de sesión:
      protected void Button1_Click(object sender, EventArgs e)
                                            {
                                                Session["UserName"] = TextBox1.Text;
                                                Response.Redirect("WebForm2.aspx");
                                            }
Para leerla:

       Response.Write(Session["UserName"]);
4.- Cross Page Posting:
Poner en la propiedad PostBackUrl del Button1 la dirección de la segunda página:
   Y en la segunda página podemos obtener el valor de la siguiente manera:
         TextBox txtFirstPage = (TextBox)(PreviousPage.FindControl("TextBox1"));
      Response.Write(String.Format("You wrote {0} in Page1",txtFirstPage.Text));

5.- Submit Form.

Esto funciona con controles HTML que no sean del lado del servidor.
Ejemplo de la primera página:
  <form id="Form1" method="post" runat="server">
     <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
  </form>
   <form name="SubmittedForm" action="WebForm2.aspx" method="post">
      <input id="Submit1" type="submit" value="submit" onclick="CopyTextToHiddenField()" />
      <input name="Hidden1" type="hidden" />
    </form>

La función CopyTextToHiddenField() copia el valor de la caja de texto a un campo escondido. Hay que ponerla dentro del tag <head> como en el siguiente ejemplo:
<script language="javascript">
            function CopyTextToHiddenField()
            {
                 var textbox1Value = document.getElementById("<%=TextBox1.ClientID%>").value;
                 document.forms[1].document.getElementById("Hidden1").value = textbox1Value;
            }
</script>

Ahora podemos obtener el valor de la siguiente manera:
   Response.Write(Request.Form["Hidden1"]);  
6.- Server.Transfer o Server.Execute:
En la página que tenemos nuestra forma debemos usar el Server.Transfer o Server Execute:
protected void Button1_Click1(object sender, EventArgs e)
 {  
    Server.Transfer("WebForm2.aspx", true);
  }


En la página en que queremos obtener los datos:

 Response.Write(Request.Form["TextBox1"]);

Estas son las formas que el sitio de Microsoft nos dice que podemos usar, pero hay una forma que a mi parecer es la mejor de las que he mostrado anteriormente (aunque no sea la ideal en todos los casos) y es la siguiente:
En la página inicial colocamos nuestros controles y los exponemos como propiedades:
 public partial class _Default : System.Web.UI.Page
{

     public TextBox pp_Nombre
    {
         get { return TextBox1; }
     }
     public TextBox pp_Telefono
     {
  get { return TextBox2; }
    
     }
     protected void Page_Load(object sender, EventArgs e)
     {

     }
 }

Y en la segunda página colocamos la siguiente directiva:
   <%@ PreviousPageType VirtualPath="~/Default.aspx"  %>
Después colocamos el siguiente código para leer los datos:
public partial class Default2 : System.Web.UI.Page
 {
     protected void Page_Load(object sender, EventArgs e)
     {
         Label1.Text = PreviousPage.pp_Nombre.Text;
         Label2.Text = PreviousPage.pp_Telefono.Text;

     }
 }


Como pueden ver en .NET existen varias formas de hacerlo y podemos escoger el que más se ajuste a nuestras necesidades.
NOTA:
Si estás usando Master Pages puedes usar Cross Page Posting, pero al buscar el control debes obtener primero una referencia al ContentPlaceHolder ya que es el contenedor de los controles de tu página aspx.
Ejemplo:
En la primera página pones en el control que vaya a llamar a la otra página el nombre de esta en la propiedad PostBackUrl.
y en la segunda accedes a los controles de la siguiente manera:
protected void Page_Load(object sender, EventArgs e)
   {
      if (Page.PreviousPage != null)
      {
         ContentPlaceHolder cph = (ContentPlaceHolder)Page.PreviousPage.Master.FindControl("LessonsLearnedPlaceHolder");
            if (cph != null)
            {
               TextBox Sourcelbl = (TextBox)cph.FindControl("txtfailureid");
               Component cmp = new Component();
               if (Sourcelbl != null)
               {
                  this.LblFailureid.Text = Sourcelbl.Text;
                  cmp.FailureID = LblFailureid.Text;
               }
            }
         }

      }
Y con esto tendremos acceso a las propiedades de todos los controles de la página previa.

miércoles, 12 de febrero de 2014

Pasos para renombrar un proyecto de ASP.NET

Algunas veces es necesario renombrar un proyecto de ASP.NET, especialmente cuando nos basamos en una plantilla predefinida.

Para hacerlo es necesario seguir lo siguientes pasos:

  1. Renombrar el folder que contiene al website.

  2. Abrir el sitio en Visual Studio.

  3. Renombrar la solución dando un click con el botón derecho en la solución, seleccionando rename del menú contextual.

  4. Renombrar el proyecto dando un click con el botón derecho en el proyecto, seleccionando rename del menú contextual.

  5. Abrir el website como proyecto.

  6. Modificar el Assembly Name y el Default Namespace en las propiedades del proyecto.

  7. Reemplazar las ocurrencias de namespace <proyecto>{ con el nombre del proyecto deseado en todos los archivos (CTRL+SHIFT+H).

  8. Reemplazar las ocurrencias de Inherits="<proyecto>. con el nombre del proyecto deseado en todos los archivos (CTRL_SHIFT_H).


Con estos pasos quedará todo con el nuevo nombre de proyecto.

Mover mensajes seleccionados a un personal folder en Oulook 2016

Este es un ejemplo de como mover los mensajes seleccionados a un personal folder (pst) en Outlook 2016 usando VBA. Sub MoveInbox()     Mov...