书城计算机网络综合应用软件设计
8724600000031

第31章 软件构造(10)

node3.Text=dt3.Rows(level3).Item(”CategoryName”)

’把第三层节点挂到到第二层节点上

node2.Nodes.Add(node3)

Next

’把第二层节点及其所有第三层字节点挂到到第一层节点上

node1.Nodes.Add(node2)

Next

’把第一层节点挂到树上

Me.TreeView1.Nodes.Add(node1)

Next

End Sub

Public Function GetData(ByVal SqlStr As String)As DataTable

Return SqlHelper.ExecuteDataset(SqlHelper.ConnectionString,CommandType.Text,_SqlStr).Tables(0)

End Function

11.如何使用DataList显示数据

ASP.NET提供了两个控件DataList和Repeater,这两个控件为呈现列表样式的数据提供了更大的灵活性。这些控件基于模板,因此没有自己的默认呈现形式。数据的呈现方式完全取决于控件模板的实现,而控件模板描述如何表示数据项。Repeater实际上并没有外观,必须要提供UI,这就意味着必须要使用一个模板。相反,DataList控件是一个捆绑到数据的列表,有一个默认的外观和丰富的行为。为这两个控件添加模板的方法是一样的。

<;%@Import Namespace=”System.Data”%>;

<;%@Import Namespace=”System.Data.SqlClient”%>;

’格式化DataList,并与数据源绑定

DataKeyField=”title_id”runat=”server”>;

书名:

CommandName=”Select”style=”color:darkred”runat=”server”ID=”Linkbutton1”

NAME=”Linkbutton1”/>;

价格:<;%#DataBinder.Eval(Container.DataItem,”price”,”{0}”)%>;

有了这个模板template,就可以指定用哪些HTML控件来组成数据,捆绑控件的每一部分。有5个模板的名字可以与DataList控件一起使用:HeaderTemplate用于控件的最顶端部分,ItemTemplate用于各个项目,Alternating—Item—Template用于其他项目,SeparatorTemplate用于各个项目之间的区域,FooterTemplate用于控件的底部。

在编辑DataList模板时,可以用VisualStudio.NET的模板编辑器进行编辑。在.NET环境中,选中DataList控件,单击鼠标右键,弹出菜单中的“项模板”。在项目模板中,控件的事件可以从DataList模板内激发,传递到与DataList本身连接的事件处理程序的命令。例如,ItemTemplate内的LinkButton可以激发Select命令。通过设置DataList的OnSelectedIndexChanged属性,可以调用事件处理程序响应此命令。

12.如何使用frame

很多商务网站的后台管理或者很多基于web管理信息系统最上面是标题区域;左下半部分是功能导航区,在图中是以树形的结构形式进行导航;右下半部分是操作区。这种界面风格简洁明了,也比较容易实现。在Web上这种界面风格常用框架(frame)来实现。

为了在.NET中使用框架,可以在工程中添加新项,选择框架页。并选择符合自己要求的框架结构。

13.如何在ASP.NET中使用JavaScript

JavaScript是被嵌入到网页中的HTML代码中,并且由浏览器来执行的脚本语言,可以用它来进行辅助设计。因为JavaScript可以被浏览器解释执行,即在客户端执行,这能提高我们网页的执行效率。例如,在页面提交前,对用户输入进行验证,出错弹出对话框,鼠标移动等功能。

下面通过一个例子来说明在ASP.NET后台如何使用JavaScript。例如,在打开某网页时,如果是非注册用户,需要弹出一个对话框进行提示,可以在PageLoad事件中写如下代码:

Private Sub Page_Load(…,…)Handles MyBase.Load

……

If not Isregiser() then

Response.Write(””)

End if

……

End sub

下例是单击按钮弹出新窗口:

Private Sub Button1_Click(…,…) Handles Button1.Click

Response.Write(””)

End Sub

6.6综合应用举例

6.6.1如何实现登录

对于软件系统,我们通过登录功能来验证用户身份,从而分配对应的用户权限。用户输入登录名和密码后,进行登录确认。确认分为两个步骤。

第一步是输入的登录名和密码是否符合格式要求。例如,规定登录名必须为20个字符以内的数字或字母组合。用控件RegularExpressionValidator来进行验证,需要在此控件的ValidationExpression属性输入正则表达式[azA—Z_0—9]{1,20}|S,并要把ControlToValidate属性定义为登录名框的名称。

同时规定登录名不能为空,那么用控件RequiredFieldValidator来进行验证。

如果验证有错误,需要提醒用户,这里使用控件ValidationSummary来显示错误的提示信息。ValidationSummary有两种显示错误的方式,一种是弹出框的形式,一种是标签的形式。下面是两种不同显示方式的属性设置。

弹出框:ShowMessageBox:true

ShowSummary:false

标签:ShowMessageBox:false

ShowSummary:true

第二步是验证登录名是否存在,密码是否正确。首先根据登录名查找有关用户的信息,如果查找不到,那么说明用户不存在。如果查找到用户信息,那么要把用户信息中的密码和界面输入的密码进行比较。如果一致,说明用户合法,分配给用户相应的权限;否则提示用户输入密码错误。

下面是具体代码:

Public Function Longin()As Integer

If Not Page.IsValid Then

Exit Function

End If

’获得确定登录名的账户记录

Dim dt As DataTable

Dim help As SqlHelper

dt=help.ExecuteDataset(SqlHelper.ConnectionString,CommandType.Text,_”GetAccountByName"”&;LogonEmailTextBox.Text&;”"”).Tables(0)

’验证是否查到了数据

If dt.Rows.Count=0 Then

clientkey=0

Return clientkey

End If

’比较密码,如果相同,则将账号付给ClientKey

If(dt.Rows(0).Item(”Password”)=LogonPasswordTextBox.Text)Then

clientkey=dt.Rows(0).Item(”AccountId”)

Return clientkey

Else

Return clientkey

End If

End Function

6.6.2如何实现注册功能

对于系统的使用,新的用户要进行登记注册,这在一些网站上是可以经常看到的。

这里强调两个问题。

第一个问题是登录名称的验证,包括以下要求。

①不能为空。使用控件RequiredFieldValidator。

②符合输入要求。比如20个字母和数字的组合,使用控件RegularExpressionValidator。

③名称唯一。使用控件CustomValidator,在程序中编写对应的处理函数,查询用户输入的登录名是否已经使用,如果已经存在这样的登录名,那么将控件CustomValidator的IsValid属性设置为false。

第二个问题是密码的确认,包括以下要求。

①不能为空。使用控件RequiredFieldValidator。

②符合输入要求。比如20个字母和数字的组合,使用控件RegularExpressionValidator。

③比较两次输入密码是否一致。使用控件CompareValidator,要使用两个CompareValidator控件,两个控件的ControlToValidate属性分别设置为要验证的控件,第一个CompareValidator控件的ControlToCompare属性为第二个CompareValidator控件验证的输入框,同理,第二个CompareValidator控件的ControlToCompare属性为第一个CompareValidator控件验证的输入框,这样就实现了两次密码的验证。

下面是具体代码:

Private Function NameExist(ByVal ClientName As String) As Boolean

Dim sql As SqlHelper