ASP.NET三层数据操作与GridView互动

注册用户?管理用户? 练习一个面向对象的ASP.NET练习。以下博文是很基础很基础,适合刚接触ASP.NET参考。

在数据库,创建一个表[Member],用来存储用户注册的信息。

复制代码
View Code
-- =============================================
-- Author:        Insus.NET
-- Create date: 2013-04-30
-- Description:    会员信息存储表
-- =============================================
CREATE TABLE [dbo].[Member]
(
    [UserName] NVARCHAR(10) PRIMARY KEY NOT NULL,
    [Email] NVARCHAR(50) NULL,
    [IsUser] BIT DEFAULT(0) NOT NULL    
)

GO
复制代码


用户注册时,其实就是一个添加记录的动作,添加前,还要判断记录是否有已经存在,也就是用户名是否有已经被注册。写一个插入的存储过程:

复制代码
View Code
-- =============================================
-- Author:        Insus.NET
-- Create date: 2013-04-30
-- Description:    注册会员信息
-- =============================================
CREATE PROCEDURE [dbo].[usp_Member_Insert]
(
    @UserName NVARCHAR(10),
    @Email NVARCHAR(50)
)
AS
IF EXISTS (SELECT TOP 1 1 FROM [dbo].[Member] WHERE [UserName] = @UserName)
BEGIN
    RAISERROR(N'用户名[%s]已经注册',16,1,@UserName)
    RETURN
END
INSERT INTO [dbo].[Member] ([UserName],[Email]) VALUES (@UserName,@Email)
GO
复制代码


当然,你作为一个网站管理员,你得管理你的站点所有注册用户信息,下面是获取所有注册的用户信息:

复制代码
View Code
-- =============================================
-- Author:        Insus.NET
-- Create date:               2013-04-30
-- Description:    获取所有注册会员信息
-- =============================================
CREATE PROCEDURE [dbo].[usp_Member_GetAll]
AS
SELECT [UserName],[Email],[IsUser] FROM [dbo].[Member]

GO
复制代码


你的站点会员日益增多,事务也越来越繁杂,你得开始对有资格的会员授权,下面是提升为管理员或是取消会员的权限。

复制代码
View Code
-- =============================================
-- Author:        Insus.NET
-- Create date:               2013-04-30
-- Description:    给会员授权
-- =============================================
CREATE PROCEDURE [dbo].[usp_Member_Update]
(
    @UserName NVARCHAR(10),    
    @IsUser BIT
)
AS
UPDATE [dbo].[Member] SET [IsUser] = @IsUser WHERE [UserName] = @UserName
GO
复制代码


OK,我们将准备在ASP.NET写程序了,为了程序与数据库沟通好,下载一个组件:http://www.cnblogs.com/insus/archive/2010/01/23/1654653.html 解压之后,放入网站的BIN目录中。
再下载一个js类库:http://www.cnblogs.com/insus/archive/2008/11/26/1341703.html 解压之后,同样放入网站的BIN目录中。

配置Web.config,把连接数据库语句,写在web.config文件内。

复制代码
View Code
<?xml version="1.0"?>
<configuration>
  <connectionStrings>
    <add name="InsusConnectionString" connectionString="Server=127.0.0.1;Initial Catalog=Demo;User ID=sfr;Password=in2012jq;Packet Size=8192;Max Pool Size=1000;" providerName="System.Data.SqlClient"/>
  </connectionStrings>
  <system.web>
    <compilation debug="true" targetFramework="4.5"/>
    <httpRuntime targetFramework="4.5"/>
  </system.web>
</configuration>
复制代码


接下来,我们在站点的App_Code目录下创建一个对象:

复制代码
Insus.NET.Member
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;

/// <summary>
/// Summary description for Member
/// </summary>
namespace Insus.NET
{
    public class Member
    {
        private string _UserName;
        private string _Email;
        private bool _IsUser;

        public string UserName
        {
            get { return _UserName; }
            set { _UserName = value; }
        }
        public string Email
        {
            get { return _Email; }
            set { _Email = value; }
        }
        public bool IsUser
        {
            get { return _IsUser; }
            set { _IsUser = value; }
        }

        BusinessBase objBusinessBase = new BusinessBase();
        
        public Member()
        {
            //
            // TODO: Add constructor logic here
            //
        }

        public DataTable GetAll()
        {
            return objBusinessBase.GetDataToDataSet("usp_Member_GetAll").Tables[0];
        }

        public void Insert()
        {
            Parameter[] parameter = { 
                                        new Parameter ("@UserName",SqlDbType.NVarChar,-1,_UserName),
                                        new Parameter ("@Email",SqlDbType.NVarChar,-1,_Email)
                                    };
            objBusinessBase.ExecuteProcedure("usp_Member_Insert", parameter);
        }

        public void Update()
        { 
             Parameter[] parameter = { 
                                        new Parameter ("@UserName",SqlDbType.NVarChar,-1,_UserName),
                                        new Parameter ("@IsUser",SqlDbType.Bit,1,_IsUser)
                                    };
            objBusinessBase.ExecuteProcedure("usp_Member_Update", parameter);
        }
    }
}
复制代码


在网站创建一个网页,是让用户注册会员的地方:

View Code
用户名:<asp:TextBox ID="TextBoxUserName" runat="server"></asp:TextBox>
            <br />&nbsp;&nbsp;&nbsp;&nbsp;箱:<asp:TextBox ID="TextBoxEmail" runat="server" Width="300"></asp:TextBox>
            <br />
            <asp:Button ID="ButtonReg" runat="server" Text="注册" OnClick="ButtonReg_Click" />


上面的注册铵钮,需要在.aspx.cs写Click事件:



试运行看看执行效果:



有了用户注册,作为网站管理员,得有一个页面,来管理这些注册的会员,也就是说,把数据库的记录显示于网页上。我们就用Gridview控件吧,在最后一列,我们还要摆放一个铵钮,让管理员对某一会员的权限管理。

复制代码
MgtMember.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="MgtMember.aspx.cs" Inherits="MgtMember" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:GridView ID="GridViewMember" runat="server" AutoGenerateColumns="false" Width="400" DataKeyNames="UserName">
                <Columns>
                    <asp:TemplateField>
                        <HeaderTemplate>
                            UserName
                        </HeaderTemplate>
                        <ItemTemplate>
                            <%# Eval("UserName") %>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField>
                        <HeaderTemplate>
                            Email
                        </HeaderTemplate>
                        <ItemTemplate>
                            <%# Eval("Email") %>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField>
                        <HeaderTemplate>
                            IsUser
                        </HeaderTemplate>
                        <ItemTemplate>
                            <asp:Label ID="LabelIsUser" runat="server" Text=""></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField>
                        <HeaderTemplate>
                        </HeaderTemplate>
                        <ItemTemplate>
                            <asp:Button ID="ButtonOpt" runat="server" Text="设置" />
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
        </div>
    </form>
</body>
</html>
复制代码


GridView写好了,得为它绑定数据:


现在我们看看网页运行的效果,当然真实环境中,这个网页需要设置权限,有权限才能访问得到。现在这些就略去了

 

看到否,上图的IsUser列,以及最后一列的事件没有写。现在我们来完善它们,先来看看IsUser,是管理员的显示Y,反之显示为N,因此我们要给Gridview控件写一个OnRowDataBound事件。



.aspx.cs:

 

第29行代码,如果不是 DataRow,将不执行下面的代码。
第31行代码,把e.Row.DataItem转换为DataRowView对象。
第33行,判断GridView内是否有Label这个控件。
第35和36行代码,找到Label并赋值。


Ok,我们再把铵钮事件写好,就完成了。怎样写GridView自定义列的铵钮事件呢?再在GridView控件,添加一个OnRowCreated事件:



在.cs代码页中,写OnRowCreated事件:

 

 程序写到此,我们来看看效果:

 
现在, 我们还有一点点没有完成,就是当IsUser为Y时,右边的铵钮显示为取消,反之显示为"设置",怎样改呢,实现的地方,应该是在OnRowDataBound事件中去完成。下面高亮的代码,就是添加与修改的代码:



如果你想需要此教程序的源程序(不包含数据库),可从下面链接下载得到:
http://download.cnblogs.com/insus/ASPDOTNET/aspx_3_gridv.rar

 

posted @   Insus.NET  阅读(22278)  评论(12编辑  收藏  举报
编辑推荐:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
阅读排行:
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· 【全网最全教程】使用最强DeepSeekR1+联网的火山引擎,没有生成长度限制,DeepSeek本体
历史上的今天:
2009-05-01 WebSite设置首页或是加入收藏夹功能
点击右上角即可分享
微信分享提示