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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM