Crear un punto de venta con ASP.NET y SQL Server (Parte 5)

Usuarios del Sistema
Para terminar este tutorial desarrollaremos la pantalla de usuarios del sistema, poniendo atención se puede aprender como hacer también la pantalla de productos y unidades de medida.
Agregamos una nueva página llamada administrar.aspx, seleccioamos la Master page (main.master). el código HTML de administrar.aspx:
<%@ Page Title="" Language="C#" MasterPageFile="~/main.master" AutoEventWireup="true" 
CodeFile="administrar.aspx.cs" Inherits="administrar" %>

<asp:Content ID="cntMain" ContentPlaceHolderID="cphMain" Runat="Server">
<h3><a href="user-lista.aspx">Usuarios del Sistema</a></h3>
</asp:Content>
Luego agregamos una página llamada users-lista.aspx, la cualtendrá la siguiente apariencia:
Base de Datos
Para lograr esaapariencia, este es el código HTML:
<asp:content contentplaceholderid="cphMain" id="cntMain" runat="Server">
    <h3>

Usuarios del Sistema</h3>
<table style="width: 100%;">
    <tbody>
<tr>
        <td style="border-right-color: silver; border-right-style: dotted; border-right-width: 1px; text-align: left; vertical-align: top; width: 200px;"><a href="http://www.blogger.com/user.aspx?id=0">Nuevo Usuario</a>    
        </td>
        <td style="text-align: left; vertical-align: top; width: 580px;"><asp:label id="lblMessage" runat="server" text=""></asp:label>
            <asp:gridview autogeneratecolumns="False" id="grdLista" runat="server" width="100%">
                <columns>
                    <asp:templatefield>
                        <itemtemplate>
                            <a %="" href="http://www.blogger.com/user.aspx?id=<%#Eval(" user_login?)="">">Editar</a>
                        </itemtemplate>
                        <itemstyle width="16">
                        <headertemplate>
                        Editar
                        </headertemplate>
                    </itemstyle></asp:templatefield>
                    <asp:boundfield datafield="user_login" headertext="Usuario">
                        <headerstyle horizontalalign="Left">
                        <itemstyle horizontalalign="Left">
                    </itemstyle></headerstyle></asp:boundfield>
                    <asp:boundfield datafield="nombre" headertext="Nombre completo">
                        <headerstyle horizontalalign="Left">
                        <itemstyle horizontalalign="Left">
                    </itemstyle></headerstyle></asp:boundfield>
                </columns>
            </asp:gridview>
        </td>
    </tr>
</tbody></table>
</asp:content>
Luego, el código C# en user-lista.aspx.cs:
protected void Page_Load(object sender, EventArgs e){
    try{
        if (!Context.User.Identity.IsAuthenticated){
            FormsAuthentication.RedirectToLoginPage("login.aspx");
        }
        else{
            if (!Page.IsPostBack){
                ReadData();
            }
        }
    }
    catch (Exception ex){
        lblMessage.Text = ex.Message;
    }
}
void ReadData() {
    try{
        SqlConnection cnn = new SqlConnection(clsMain.CnnStr);
        cnn.Open();
        SqlDataAdapter da = new SqlDataAdapter("SELECT user_login, nombre " +
            " FROM users ", cnn);
        DataSet ds = new DataSet();
        da.Fill(ds, "USERS");
        grdLista.DataSource = ds.Tables["USERS"];
        grdLista.DataBind();
        cnn.Close();
        cnn.Dispose();
        ds.Dispose();
        da.Dispose();
    }
    catch (Exception ex){
        lblMessage.Text = ex.Message;
    }
}
Luego sigue agregar la página user.aspx, la cual tendrá el siguiente diseño:

El código HTML:
<asp:content contentplaceholderid="cphMain" id="cntMain" runat="Server">
    <h3>

Usuarios del Sistema</h3>
<table style="width: 100%;">
    <tbody>
<tr>
        <td style="border-right-color: silver; border-right-style: dotted; border-right-width: 1px; text-align: left; vertical-align: top; width: 200px;"><asp:linkbutton id="btnGrabar" onclick="btnGrabar_Click" runat="server" tooltip="Clic aqui para grabar">Grabar</asp:linkbutton>
            <a href="http://www.blogger.com/user-lista.aspx">Cancelar</a>
        </td>
        <td style="text-align: left; vertical-align: top; width: 580px;"><table>
                <tbody>
<tr>
                    <td>Usuario:</td>
                    <td><asp:textbox id="txtUSER_LOGIN" maxlength="50" runat="server" width="150"></asp:textbox>
                    </td>            
                </tr>
<tr>
                    <td>Nombre:</td>
                    <td><asp:textbox id="txtNOMBRE" maxlength="50" runat="server" width="150"></asp:textbox></td>
                </tr>
<tr>
                    <td>Contraseña:</td>
                    <td><asp:textbox id="txtUSER_PASSWORD" maxlength="50" runat="server" width="150"></asp:textbox></td>
                </tr>
<tr>
                    <td>Activo:</td>
                    <td><asp:checkbox id="chkACTIVO" runat="server">           
                        </asp:checkbox></td>
                </tr>
<tr>
                    <td>Ventas:</td>
                    <td><asp:checkbox id="chkVENTAS" runat="server">
                        </asp:checkbox></td>
                </tr>
<tr>
                    <td>Reportes:</td>
                    <td><asp:checkbox id="chkREPORTES" runat="server">
                        </asp:checkbox></td>
                </tr>
<tr>
                    <td>Administrar:</td>
                    <td><asp:checkbox id="chkADMINISTRAR" runat="server">
                        </asp:checkbox></td>
                </tr>
</tbody></table>
</td>
    </tr>
</tbody></table>
<asp:label id="lblMensaje" runat="server" text=""></asp:label>
</asp:content>
Luego, el código C# de user.aspx.cs:
protected void Page_Load(object sender, EventArgs e){
    try{
        if (!Page.IsPostBack){
            if (!Context.User.Identity.IsAuthenticated){
                FormsAuthentication.RedirectToLoginPage("login.aspx");
            }
            else{
                if (Request.Params["id"].ToString() == "0"){
                    //Nuevo
                    btnGrabar.Enabled = true;
                }
                else{
                    //editar
                    txtUSER_LOGIN.Enabled = false;
                    ReadData(Request.Params["id"].ToString());
                }
            }
        }
    }
    catch (Exception ex){
        lblMensaje.Text = ex.Message;
    }

}
void ReadData(string prmUSER_LOGIN){
    try{
        SqlConnection cnn = new SqlConnection(clsMain.CnnStr);
        cnn.Open();
        SqlCommand cmd = new SqlCommand("SELECT * FROM users WHERE user_login ='"+ prmUSER_LOGIN +"'", cnn);
        SqlDataReader dr = cmd.ExecuteReader();
        if (dr.Read()){
            txtUSER_LOGIN.Text = dr["USER_LOGIN"].ToString();
            txtUSER_PASSWORD.Text = dr["USER_PASSWORD"].ToString();
            txtNOMBRE.Text = dr["NOMBRE"].ToString();
            chkACTIVO.Checked = Convert.ToBoolean(dr["ACTIVO"]);
            chkVENTAS.Checked = Convert.ToBoolean(dr["VENTAS"]);
            chkREPORTES.Checked = Convert.ToBoolean(dr["REPORTES"]);
            chkADMINISTRAR.Checked = Convert.ToBoolean(dr["ADMINISTRAR"]);
        }
        dr.Close();
        cnn.Close();
        cmd.Dispose();
        cnn.Dispose();
    }
    catch (Exception ex){
        lblMensaje.Text = ex.Message;
    }
}
   
bool fnRegistro(string prmUSER_LOGIN, string prmUSER_PASSWORD, string prmNOMBRE,
    int prmACTIVO, int prmREPORTES, int prmVENTAs, int prmADMINISTRAR){
    try{
        SqlConnection cnn = new SqlConnection(clsMain.CnnStr);
        cnn.Open();
        string varSQL = "execute proc_USERS '" + prmUSER_LOGIN + "'," +
            "'" + prmUSER_PASSWORD + "','" + prmNOMBRE + "'," + prmACTIVO + "," + prmREPORTES + "," +
            "" + prmVENTAs + "," + prmADMINISTRAR + " ";
        SqlCommand cmd = new SqlCommand(varSQL, cnn);
        cmd.ExecuteNonQuery();
        cnn.Close();
        cnn.Dispose();
        cmd.Dispose();
        return (true);
    }
    catch (Exception ex){
        lblMensaje.Text = ex.Message;
        return (false);
    }
}
protected void btnGrabar_Click(object sender, EventArgs e){
    try{
            
        if (fnRegistro(txtUSER_LOGIN.Text,txtUSER_PASSWORD.Text,txtNOMBRE.Text,
            Convert.ToInt32(chkACTIVO.Checked), Convert.ToInt32(chkREPORTES.Checked), 
            Convert.ToInt32(chkVENTAS.Checked), Convert.ToInt32(chkADMINISTRAR.Checked))) {
            Response.Redirect("user-lista.aspx");
        }
    }
    catch (Exception ex){
        lblMensaje.Text = ex.Message;
    }
}
Para terminar, escribimos el siguiente procedimiento almacenado en el SQL Server:
USE [pventa]
GO

/****** Object:  StoredProcedure [dbo].[proc_USERS]    Script Date: 09/23/2011 15:07:40 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[proc_USERS]
 @USER_LOGIN NVARCHAR(50),
 @USER_PASSWORD VARCHAR(8000),
 @NOMBRE NVARCHAR(50),
 @ACTIVO BIT,
 @REPORTES BIT,
 @VENTAS BIT,
 @ADMINISTRAR BIT 
AS
/*
USUARIOS DEL SISTEMA
FECHA:24-OCT-2011
PROGRAMADOR:J. GABRIEL CASTILLO
MAIL: jgcastillo@uat.edu.mx,muskin@msn.com
*/
BEGIN TRANSACTION tUSERS
 IF NOT EXISTS(SELECT 1 FROM users WHERE user_login=@USER_LOGIN)
 BEGIN
  INSERT INTO USERS(USEr_LOGIN,USER_PASSWORD,NOMBRE,activo,reportes,ventas,administrar)
  VALUES(@USER_LOGIN,@USER_PASSWORD,@NOMBRE,@ACTIVO,@REPORTES,@VENTAS,@ADMINISTRAR)
 END
 ELSE
 BEGIN
  UPDATE USERS SET
  NOMBRE=@NOMBRE,
  activo=@ACTIVO,
  reportes=@REPORTES,
  ADMINISTRAR=@ADMINISTRAR,
  VENTAS=@VENTAS 
  WHERE user_login=@USER_LOGIN
 END
COMMIT TRANSACTION tUSERS
RETURN
ERROR:
 RAISERROR('No se puede ejecutar la acción solicitada,16,1)
 ROLLBACK TRANSACTION tUSERS
 GOTO FIN
RETURN
FIN:
GO
Listo, hemos terminado.
HASTA EL SIGUIENTE TUTORIAL, DIOS LOS BENDIGA

Anterior | Inicio

33 comentarios:

  1. Muchas gracias, estoy al pendiente de la proxima publicación, era lo que esperaba, c# + ASP.NET + SQL

    Excelente!!

    ResponderEliminar
  2. Muchas gracias por este excelente tutorial, podrias enviarme el codigo a mi correo porfavor. Mi email es maur047(arroba)hotmail.com

    ResponderEliminar
  3. Muchas gracias, es un excelente aporte.

    ResponderEliminar
  4. Muchisimas gracias por tu aporte, me ha servido de maravilla, espero el siguiente tutorial!!

    ResponderEliminar
  5. Hermano le heche una ojeada a tu tuto y se ve muy bien yo no se ni gota de ASP pero pretendo aprender y al encontrar este ejemplo me dio gusto ya que podre aprender de forma práctica y no como en los libros que solo escriben pura paja y nada practico. eh hora buena hermano gracias por el excelente aporte nuevamente

    ResponderEliminar
  6. hola me podrias enviar el codigo fuente porfavor me gustaria estudiarlo para poder aplicarlo y tratar de utilizarlo mi correo es jose_manuel1622@hotmail.com saludos cordiales !!

    ResponderEliminar
  7. Muy buena ayuda, terrible entrada te mandaste, sólo me quedan algunas sugerencias pero detalles, y como dice el anonimo de arriba, me dio gusto encontrar este ejemplo. Saludos!

    ResponderEliminar
  8. Puedes Mostrar el Codigo o enviarme el codigo para ayudar a mejorarlo? Obvio que las modificaciones tb las dare y podemos subirlo a GitHub no se nestor.davila@rocketmail.com

    ResponderEliminar
  9. ola muy bueno tu tutorial sobre asp.net, por favor necesito aprender asp.net y eso me ba servir vastante podrias enviarme ami correo.es:
    (yomaco2@hotmail.com) gracias..

    ResponderEliminar
  10. hola que tal excelente tuto, aun me queda algo medio vago con respecto a la conexzion sql podrias enviarme el zip o rar completo porfavor sky_diver_01@live.com

    ResponderEliminar
  11. Hola excelente tutorial, no se si me puedas enviar el codigo a mi correo, muchas gracias vleim_angel@hotmail.com

    estare eternamente agradecido

    ResponderEliminar
  12. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  13. Hola amigos soy nuevo en esto, me prodrian ayudar en la parte de editar un usuario, me vota error.
    En la pagina users-lista.aspx, para modificar necesito enviarle el código del usuario pero
    me sale error en la siguiente instrucción

    ">Editar

    URGENTE ...

    ResponderEliminar
  14. Excelente material, estoy muy verde en esto y estoy seguro que me sera de mucha utilidad, muchisi++++++++++++++++++ gracias................

    ResponderEliminar
  15. Buenas tardes. Alguien pódría enviarme el código de la parte 2, donde se lleva a cao el REPLACE,o me pudiesen enviar el código completo.
    anexo mi dirección. Gracias.

    fabvader@hotmail.com
    darthsolitude@gmail.com

    ResponderEliminar
  16. Muy Interesante el tutorial, podrias enviarme el codigo completo por favor... ifmm87@gmail.com, de antemano gracias

    ResponderEliminar
  17. Buen tutorial... podrían enviarme el sistema a mi correo: tkd_ddm@outlook.com
    muchas gracias

    ResponderEliminar
  18. Que buen aporte haz hecho a la comunidad, te felicito!!!

    ResponderEliminar
  19. muy bueno, ahora a estudiar este sistema. Gracias.

    ResponderEliminar
  20. Buan dia muy buen tutorial lo he estado siguiendo pero tengo algunos inconvenientes en mi acceso a internet por lo que te pido el favor si tienes el codigo por favor me lo envies a mi correo darwin_mn@hotmail.com

    muchisimas gracias
    y felicitaciones por compartir aportes como estos

    ResponderEliminar
  21. exelente tutorial hermano,si puedieras enviar el codigo a mi correo: juancaryboy@hotmail.com

    ResponderEliminar
  22. bueno espero que me funcione el nuevo lenguaje C++ ya que uso vb.net pero probare de alli te escribire si me ayudo mucho este proyecto ya que estoy como loco buscando terminarlo expondre dentro de poco no sabes cuanto me sirven sus aportes informaticos

    ResponderEliminar
  23. amigos a ver quien me puede ayudar con la ultima parte no se si los ultimos webform llevan masterpage o no??

    ResponderEliminar
  24. Otra consulta alguine pudo completar la parte del Remmplace con los menus de reportes que no me sirvieron cualquier ayuda al correo blemus_100@hotmail.com o aqui mismo gracias

    ResponderEliminar
  25. Hola excelente aporte, como el 90% de los que comentan, tambien soy novato, me gustaria saber como hago para hacer esto mismo pero con un carrito de compras y si me puedes enviar el fuente o publicarlo en alguna pagina o servidor seria menos canson para ti, ya que todos queremos el codigo fuente, mi mail es coolglos@gmail.com.
    Gracias

    ResponderEliminar
  26. Muchas gracias por el tutorial, excelente. me servirá de mucho, podrías enviármelo a mi correo?, es diabloe_manuel@hotmail.com.

    muchas gracias.

    Saludos

    ResponderEliminar
  27. Muchas gracias por el tutorial, se que me sera de mucha ayuda, no se si me podrian enviar el codigo a mi correo jes_sua_love@hotmail.com

    ResponderEliminar
  28. Que cantidad de conchudos todos los que piden el código ya listico. Trabajen un ratico haber si aprenden alguna cosa....

    ResponderEliminar
    Respuestas
    1. Toda la razon, hacer un tutorial explicativo como este cuesta tiempo y trabajo, lo menos que podemos hacer es retribuir la gran ayuda que se nos da de forma gratuita, haciendo nosotros mismo el codigo ya expuesto....

      Osea: NO SEAN FLOJOS!!!!

      Eliminar
  29. Necesito de su ayuda
    tengo un error al crear el modulo user-lista
    esta linea de codigo me dife que le faltan unas comilla pero no se donde.

    Porfis me urgeeee!!!!!!
    ">Editar

    ResponderEliminar
  30. porfavor enviarme mi correo jorgeluisrc1010@gmail.com

    ResponderEliminar
  31. hola tengo problemas con la parte de usuarios donde hace referencia al template, alguien lo pudo corregir?

    (asp:templatefield>

    (a %="" href="http://www.blogger.com/user.aspx?id=<%#Eval(" user_login?)="">>Editar</itemtemplate)

    ResponderEliminar