http://blog.csdn.net/judyge/article/details/49847189
目录(?)[-]
81 BoundField数据绑定字段
82 标准数值格式化字符串Standard Numeric Format Strings
83 ButtonField按钮字段
84 CommandField命令按钮字段
85 CheckBoxField复选框字段
86 HyperLinkField超链接字段
87 ImageField图像字段
88 TemplateField模板字段
89 数据绑定Eval方法vs Bind方法
810 将Field字段转换成模板
9.8 数据控件的七种字段类型(Fields Type)的应用
GridView共支持七种字段类型,字段原本应该叫“Column”比较恰当,但ASP.NET 2.0却采用另一个名称“Field”来表示,对于名称的命名祭司认为有点不直观,因为不明的人看了根本不知道Field代表什么东西,但既然ASP.Net 2.0使用了Field,各位就迁就一下,表9-6为GridView支持七种字段类型的说明。
表9-6 GridView字段Field类型表
Field字段类型
说 明
BoundField(数据绑定字段)
将Data Source数据源的字段数据以文本方式显示
ButtonField(按钮字段)
在数据绑定控件中显示命令按钮。根据控件的不同,它可让您显示具有自定义按钮控件(例如【添加】或【移除】按钮)的数据行或数据列,按下时会引发RowCommand事件
CommandField(命令字段)
显示含有命令的Button按钮,包括了Select、Edit、Update、Delete命令按钮(DetailsView的CommandField才支持Insert命令)
CheckBoxField(CheckBox字段)
显示为CheckBox类型,通常用于布尔值True/False的显示
HyperLinkField(超链接字段)
将Data Source数据源字段数据显示成HyperLink超级链接,并可指定另外的NavigateUrl超链接
ImageField(图像字段)
在数据绑定控件中显示图像字段
TemplateField(模板字段)
显示用户自定义的模板内容
而Field字段声明在GridView中是被包含在…标签区块中,请参考范例9-1完成后的HTML程序,以下为区块声明:
<Columns>
<asp:BoundField DataField=”EmployeeID” HeaderText=”EmployeeID”
ReadOnly=”True” SortExpression=”EmployeeID” />
<asp:BoundField DataField=”LastName” HeaderText=”LastName”
SortExpression=”LastName” />
<asp:BoundField DataField=”FirstName” HeaderText=”FirstName”
SortExpression=”FirstName” />
<asp:BoundField DataField=”Address” HeaderText=”Address”
SortExpression=”Address” />
</Columns>
由于其HTML声明使用BoundField字段,可以证明一般数据源的字段数据值会以文本方式显示。
相比较而言,DataGrid 1.0默认只支持四种类型:(1)Bound Column,(2)Button Column,(3)HyperLink Column,(4)Template Column。故可以看出以GridView功能较为丰富,应用起来也会相对容易;而以字段名称命名的DataGrid仍沿用Column,GridView则用Field。
注
(1) 以上七种Field字段类型并非只有GridView控件独有或独享,其他如DetailsView也共享这七种字段类型。
(2)不知各位是否知道为何用“Field”这个字眼,而非用“Column”,这是因为七种类型字段主要是由DataControl-Field类派生而来的,所以字尾都会带有Field字眼。
9.8.1 BoundField数据绑定字段
BoundField数据绑定字段会将Data Source数据源字段值以文本方式显示。然而BoundField对象在不同的数据绑定控件中会有不同的显示方式,如在GridView控件中显示BoundField对象为数据列,而DetailsView控件会将其显示为数据行。
BoundField属性共分为五大类,说明如表9-7和图9-7所示。
表9-7 BoundField属性分类
五大类型属性
说 明
可访问性(Accessibility)
设置AccessibleHeaderText
外观(Appearance)
设置如HeaderText、FooterText、HeaderImageUrl
行为(Behavior)
设置行为属性,其中大多为布尔值True/False
数据(Data)
设置数据源字段与字符串格式化
样式(Style)
设置颜色、字体等样式属性,包括ControlStyle、HeaderStyle、FooterStyle、ItemStyle样式
图9-7 BoundField属性分类
l BoundField数据绑定字段属性列表
表9-8为BoundField数据绑定字段的重要属性说明。
表9-8 BoundField字段重要属性
属 性
说 明
DataField
指定对应Data Source数据字段
DataFormatString
显示文本的字符串格式化,如显示成货币、科学符号
SortExpression
设置字段的排序键值
ConvertEmptyStringToNull
将Empty字符串转换为Null值,应用于当Update的数据属于Empty字符串时,将它转换为Null值
NullDisplayText
当欲显示的字段数据为Null值时,则以自定义的标题文本来显示
ApplyFormatInEditMode
当处于编辑模式时,是否套用格式化
HtmlEncode
是否进行HtmlEncode编码
InsertVisible
当处于Insert模式时,字段是否可见
以下针对BoundField重要属性作更进一步的说明:
l BoundField数据属性
w 若要指定在BoundField对象中显示的字段,可以设置DataField属性为数据字段的名称。
w 若要自定义字段字符串的格式,可以通过设置DataFormatString属性,后面会教各位如何自定义DataFormatString格式。
l BoundField行为属性
w 显示字段值之前,将HtmlEncode属性设置为True(默认为True),可对此字段值进行HTML编码,这样可防止恶意的程序代码。
w 默认只有在数据绑定控件处于只读模式时,才可以将格式字符串套用至字段值。若要在数据绑定控件处于编辑模式时将格式字符串套用至显示的值,请将ApplyFormatInEditMode属性设置为True。
w BoundField还可以针对null或空字符串进行处理,例如字段值若为null,则可通过设置NullDisplayText属性显示自定义标题,或将ConvertEmptyStringToNull属性设置为True,BoundField对象还可自动将空字符串(”“)字段值转换为null值。不像在ASP.NET 1.1中若遇到null值数据绑定会产生异常错误而当掉,必须自行花费一番功夫来处理null值的数据防呆。
l BoundField样式属性
w 通过ControlStyle可设置BoundField字段服务器子控件的样式。
w 通过FooterStyle可设置BoundField字段之页尾的样式。
w 通过HeaderStyle可设置BoundField字段之页首的样式。
w 通过ItemStyle可设置BoundField字段中数据项的样式。
范例9-3 使用BoundField数据绑定字段
本范例将说明BoundField数据绑定字段的应用,例如直接将数据表字段拖曳到设计界面所产生的GridView的文本字段就是以BoundField字段来呈现,请参考BoundField.aspx程序,以下为步骤说明。
拖曳数据表创建GridView
请直接从Northwind数据库的Products数据表点击数据表字段拖曳到设计界面(见图9-8)。
图9-8 拖曳数据表创建GridView
GridView自动格式化设置
由于原始的GridView控件太单调,故请点击GridView智能标签的【自动套用格式】,再选取其中一种方案样式即可变成较为美丽之外观(见图9-9)。
编辑BoundField字段
若要编辑BoundField字段相关属性,请点击GridView智能标签的【编辑列】进行字段的编辑,进去之后可以看到左边四个字段正是BoundField字段类型,接着随意点击一个BoundField字段(ProductID)右侧就会出现相关属性(见图9-10)。
图9-9 GridView自动套用格式设置
图9-10 编辑BoundField字段
修改BoundField字段标题文字
由于GridView的BoundField字段标题文字是英文的,而我们打算用中文来取代,故请修改BoundField字段的HeaderText属性,修改如下:
l 请将ProducID字段的HeaderText改为“产品代号”。
l 请将ProducName字段的HeaderText改为“产品名称”。
l 请将CategoryID字段的HeaderText改为“种类代号”。
l 请将UnitPrice字段的HeaderText改为“单位价格”。
以上只简单示范BoundField字段属性要如何修改,其他属性修改方式也是在此完成的,最后请运行程序,运行结果如图9-11所示。
图9-11 BoundField字段运行界面
9.8.2 标准数值格式化字符串(Standard Numeric Format Strings)
前面曾提到BoundField数据绑定提供DataFormatString字符串格式化功能,可以在不变动原始数据数字或格式的情况下将数据显示成另一种格式。但是DataFormatString不过就是一个窗口而已,它必须通过.NET 1.0原本就存在的机制叫“标准数值格式化字符串”来完成,表9-9为标准数值格式化字符串所支持的参数。
表9-9 标准数值格式化字符串
格式代号
说 明
原始格式
格式指令
运行结果
{0:C}
显示货币符号格式
2005.5
{0:C2}
NT$2,005.50
{0:D}
显示十进制数格式(限用于整数)
128
{0:D}
128
{0:E}
显示科学符号格式
2005.5
{0:E2}
2.01E+003
{0:F}
显示固定小数字数格式
2005.5
{0:F4}
2005.5000
{0:G}
显示一般格式
2005.5
{0:G}
2005.5
{0:N}
显示有逗号固定小数字数格式
2005.5
{0:N3}
2,005.500
{0:P}
显示百分比格式
0.25
{0:P}
25.00%
{0:X}
显示十六进制数格式(限用于整数)
128
{0:X}
80
{0:#}
显示自定义的数字格式
2005.5
{0:00####.00}
002005.00
范例9-4 标准数值格式化字符串(Standard Numeric Format Strings)的应用
在了解了标准数值格式化字符串的方式后,您才能将此技巧套用到BoundField字段的DataFormatString属性来格式化字符串,故请先参考FormatStrings.aspx程序,以下为程序代码:
01 Partial Class FormatStrings
02 Inherits System.Web.UI.Page
03
04 Protected Sub Page_Load(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Me.Load
05 Dim x As Double = 2005.5
06 Dim y As Integer = 128
07 Dim z As Double = 0.25
08
09 Response.Write(x.ToString() & ” 以C2格式化之后 ” &
String.Format("{0:C2}", x) & "<BR>")
10 Response.Write(y.ToString() & ” 以D格式化之后 ” &
String.Format("{0:D}", y) & "<BR>")
11 Response.Write(x.ToString() & ” 以E2格式化之后 ” &
String.Format("{0:E2}", x) & "<BR>")
12 Response.Write(x.ToString() & ” 以F4格式化之后 ” &
String.Format("{0:F4}", x) & "<BR>")
13 Response.Write(x.ToString() & ” 以G格式化之后 ” &
String.Format("{0:G}", x) & "<BR>")
14 Response.Write(x.ToString() & ” 以N3格式化之后 ” &
String.Format("{0:N3}", x) & "<BR>")
15 Response.Write(z.ToString() & ” 以P格式化之后 ” &
String.Format("{0:P}", z) & "<BR>")
16 Response.Write(y.ToString() & ” 以X格式化之后 ” &
String.Format("{0:X}", y) & "<BR>")
17 Response.Write(x.ToString() & ” 以00####.00格式化之后 ” &
String.Format("{0:00####.00}", x) & "<BR>")
18 End Sub
19 End Class
完成后请运行程序,运行界面如图9-12所示。
图9-12 标准数值格式化字符串运行界面
注
(1)格式英文指令不分大小写。
(2) 标准数值格式化字符串并不限定类型项目才能使用,而是整个.NET都可以应用,所以Console、ASP.NET到Win Form都能使用。
范例9-5 BoundField字段DataFormatString字符串格式化的应用
图9-13是GridView控件显示Northwind数据库Product数据表的原始格式,本范例说明如何将标准数值格式化字符串设置在BoundField字段的DataFormatString属性,以格式化原始数据,请参考BoundFieldFormat.aspx程序,步骤说明如下。
图9-13 Products数据表原始显示格式
创建GridView及SqlDataSource控件
请从工具箱中拖曳一个GridView及SqlDataSource控件到设计界面,并在GridView的智能标签中选择数据源为“SqlDataSource1”(见图9-14)。
图9-14 创建GridView及SqlDataSource控件
设置GridView外观样式
请在GridView智能标签中的自动格式化选择一个外观样式。
设置SqlDataSource数据库连接
GridView要能够显示数据库数据最重要的助手莫过于SqlDataSource数据源控件,故请在SqlDataSource的智能标签中选择【配置数据源】→【新建连接】→在添加连接的对话框中输入SQL Server服务器名、用户名、密码和数据库名称,完成后请按【测试连接】按钮,若设置正确,则会产生测试连接成功消息(见图9-15)。
图9-15 设置SqlDataSource数据库连接
保存数据库连接字符串
设置完数据库连接后请点击【下一步】按钮,系统会询问你“是否将连接保存到应用程序配置文件中?”,并要求您提供命名“NorthwindConnectionString”(见图9-16)。
图9-16 保存数据库连接字符串
各位别小看这个存储小操作,我反问你,它是存储在哪?又有什么用途?
(1)它会将刚才的数据库连接设置保存在Web.config配置文件中,设置如下:
<connectionStrings>
<add name=”NorthwindConnectionString” connectionString=”Data
Source=localhost;Initial Catalog=Northwind;User ID=
sa;Password=test” providerName=”System.Data.SqlClient” />
</connectionStrings>
(2)有什么用途呢?就是ADO.NET可以读取这个数据库连接设置,您就无须再在每个Web Form中重复声明,将来数据库帐号密码一更改,每张Web Form又要一一调出来修改。读取程序如下(请参考第2章范例2-4):
string connString =ConfigurationManager.ConnectionStrings [”NorthwindConnectionString”].ConnectionString;
(3)若您担心数据库连接的帐号及密码曝光,可用第2章2.9节的加密技巧:
aspnet_regiis -pe “connectionStrings” -app “/07GridView” -prov “RSAProtectedConfigurationProvider”
设置SqlDataSource的Select、Insert、Update与Delete命令
请选择Products数据源,并勾选星号(*)以读取所有的数据库字段,然而这样只会产生出Select命令,若您还想要Insert、Update与Delete语法,则必须按【高级】按钮将“生成INSERT、UPDATE和DELETE语句”(必要)及“使用开放式并发”(选择性)打钩(见图9-17)。
图9-17 配置SqlDataSource的SQL命令
编辑DataFormatString格式化
请在GridView智能标签中点击【编辑数据列】进入编辑模式,请依照表9-10将相关字段的DataFormatString及HtmlEncode属性设置为False(见图9-18)。
表9-10 字段格式化设置
字 段
格式化字符串
HtmlEncode属性
ProductID
{0:000#}
False
SupplierID
{0:0#}
False
CategoryID
{0:00#}
False
QuantityPerUnit
{0:N1}
False
UnitPrice
{0:C2}
False
UnitsInStock
{0:00##}
False
UnitsOnOrder
{0:0#}
False
RecorderLevel
{0:00}
False
图9-18 编辑DataFormatString格式化
设置完成后请按【F5】运行,在图9-19格式化结果与原始图片对照下,各位应能明显察觉格式已按照我们所给定的参数来显示了。
图9-19 Products数据表格式化结果
本范例表面上在讲格式化,但实则一并讲解了许多重要知识,包括数据库连接设置、储存位置、ADO.NET连接字符串的读取、连接字符串的加密等,各位可以细细体会本范例。
提醒
(1)BoundField字段的格式化必须将“HtmlEncode”属性设置为False(默认为True),若不改为False,则格式化是起不了任何作用的;但是HtmlEncode属性默认为True并不是没有原因的,目的是为防止恶意的Client Script程序破坏ASP.NET系统,如果不需要格式化则请维持HtmlEncode属性为True。
(2)记得将自动生成字段CheckBox打钩移除,否则字段会重复产生。
9.8.3 ButtonField按钮字段
ButtonField是在GridView字段中显示Button按钮(例如自定义的添加、删除按钮),并且当按下Button按钮时会引发“RowCommand”事件,在此事件中可以加入自定义的程序代码,比如说产品数据的订购、删除或取消的按钮。然而,ButtonField对象在不同的数据绑定控件中会有不同的显示方式,如在GridView控件中显示BoundField对象为数据列,而DetailsView控件会将其显示为数据行。
l ButtonField按钮字段属性列表
ButtonField属性与前面的BoundField属性大致上相同,仅就不同的重要属性加以说明(见表9-11)。
表9-11 ButtonField按钮字段重要属性
属 性
说 明
ButtonType
ButtonField字段共支持三种按钮形式:Button、Image、Link
DataTextField
将数据源字段数据绑定到Button按钮的文本属性中
DataTextFormatString
将DataTextField数据源字段值加以格式化
ImageUrl
当按钮形式为Image时,指定Image所在的Url
CauseValidation
单击按钮时是否会引发Validation控件验证
CommandName
单击ButtonField按钮时所要运行的命令名称
ValidationGroup
ButtonField按钮所要引发的Validation Group名称
ButtonField按钮字段重要属性与事件补充说明:
l 当ButtonField按钮字段被按下时,GridView控件会引发RowCommand事件,而DetailsView控件会引发ItemCommand事件。
l 若要判断引发命令事件之数据行的索引,请使用事件自变量的CommandArgument属性,会将该事件自变量传递至数据绑定控件的命令事件,ButtonField类会自动用适当的索引值填入CommandArgument属性。
l 若指定要显示的按钮类型,请使用ButtonType属性。当显示连接或命令按钮时,请使用Text属性,以指定要在按钮中显示的标题。如果设置Text属性,则ButtonField中的所有按钮都共享相同标题。
l 您可以将数据源字段数据绑定到Button按钮的文本属性,这样ButtonField按钮便能够显示不同标题,方式是设置DataTextField属性,若需要格式化,则设置DataTextFormatString属性。
l ButtonField按钮字段可设置的样式属性(Style)也同样有ControlStyle、FooterStyle、HeaderStyle、ItemStyle这四大类。
范例9-6 使用ButtonField按钮字段
本范例将教您如何使用ButtonField字段来构建Button按钮,以及与Button按钮字段相关属性的设置,请参考ButtonField.aspx程序,步骤说明如下:
创建GridView及SqlDataSource控件
请创建GridView及SqlDataSource控件,并将GridView的ID属性命名为“gviewProduct”,SqlDataSource数据源请指定北风数据库的Products数据表中的ProductID、ProductName、UnitPrice三个数据字段,最后再指定GridView的数据源为SqlDataSource控件(为节省页面设置细节祭司不再一一列出,若您不熟悉,请参考上一个范例的详细步骤说明)。
提醒
在此祭司建议初期尽量不要用服务器资源管理器或数据库资源管理器直接拖曳数据字段到Web Form设计界面,因为那样很容易导致您对GridView与SqlDataSource的认识不够深刻,而那种生涩感也会反馈到程序设计时的概念不够清楚;但等您通过了GridView与SqlDataSource之后,任何快速完成的向导您可以随意大量使用。
添加ListBox控件
请添加一个ListBox控件,并将其属性改为“lbOrder”,这是为了显示Button按钮所订购的产品信息。
添加ButtonField字段
请在GridView智能标签中点击【编辑列】进入编辑模式,先选择左上角的ButtonField字段类型,接着再点击【添加】按钮添加两个ButtonField命令按钮字段(见图9-20),属性设置如下:
图9-20 添加ButtonField按钮字段
l 请将第一个Button按钮字段,Text属性设置为“订购”,ButtonType属性设置为“Button”,最后将CommandName属性设为“Order”。
l 请将第一个Button按钮字段,Text属性设置为“取消”,ButtonType属性设置为“Button”,最后将CommandName属性设为“CancelOrder”。
注
CommandName属性设置是为了让程序设计判断,用户到底点击的是订购(Order)还是取消(CancelOrder)。
调整Button按钮字段顺序
图9-21左半部系统会默认产生所建立的Button按钮,您可能需要调整字段的顺序,将Button按钮调整为在GridView右侧(见图9-21)。
图9-21 ButtonField字段顺序的调整
该怎么做呢?字段顺序一样是在GridView智能标签的【编辑列】中进行,请将ProductID、ProductName与UnitPrice三个BoundField字段一并【添加】到左下角的选取字段,而被选取的字段才能够进行调整,调整方式是选取字段后按向上及向下的图标,待字段调整好后单击【确定】按钮结束(见图9-22)。
图9-22 调整字段顺序
提醒
请将“自动生成字段”取消选择,字段才不会重复产生两次。
添加RowCommand事件程序
当点击Button按钮时,会引发GridView的RowCommand事件,在此事件中可以添加自定义的程序(例如点击订购按钮时加入购物车的购物篮),而在此将会利用到STEP 3中所设置的CommandName属性,RowCommand事件程序如下:
01 ‘创建GridView Button按钮的RowCommand事件
02 Protected Sub gviewProduct_RowCommand(ByVal sender As Object, ByVal e As
System.Web.UI.WebControls.GridViewCommandEventArgs) Handles
gviewProduct.RowCommand
03 ‘获取哪个Row的行索引
04 Dim index As Integer = CType(e.CommandArgument, Int32)
05 Dim selectedRow As GridViewRow = gviewProduct.Rows(index)
06 ‘获取该行Row的字段产品名称代号
07 Dim productName As TableCell = selectedRow.Cells(1)
08 ‘判断用户按下的是哪个种类的按钮
09 Select Case e.CommandName
10 Case “Order”
11 ‘将订购的产品名称加入ListBox
12 lbOrder.Items.Add(productName.Text)
13 Case “CancelOrder”
14 ‘将取消的产品名称自ListBox移除
15 If (lbOrder.Items.Count > 0) Then
16 Dim i As Integer = 0
17
18 Do While (i <= lbOrder.Items.Count - 1)
19 If (lbOrder.Items(i).Text = productName.Text) Then
20 lbOrder.Items.Remove(lbOrder.Items(i))
21 Exit Do
22 Else
23 i += 1
24 End If
25 Loop
26 End If
27 End Select
28 End Sub
程序说明:
(1)e.CommandArgument是取得按下ButtonField按钮字段所在的行索引,以便判断是哪行被按下ButtonField按钮,再通过此索引来取得实际GridViewRow对象(数据行),而以GridViewRow.Cell(1)索引来取得ProductName字段值,进而显示在ListBox中。
(2) e.CommandName是BoundField字段中的CommandName属性(Order或CancelOrder)设置值,这两个参数的搭配应用实际上只是为了识别ButtonField按钮字段坐标,因为GridView中有一堆按钮,系统根本无从知道用户按下哪个按钮,故通过e.CommandArgument取得Y轴坐标(Row),而e.CommandName取得X轴坐标(Column),有了X与Y坐标,便能够精准定位识别到底是哪一个按钮被按下,而该运行什么操作。运行结果如图9-23所示。
图9-23 ButtonField按钮字段运行界面
范例9-7 ButtonField按钮字段的格式化
上一个范例的所有Button按钮统一命名为“订购”与“取消”,若想要每个按钮都能显示不同的文字信息,该如何做呢?本范例是对前一个范例的稍加修改,主要设置了订购与取消两个按钮之DataTextField与DataTextFormatString,请参考ButtonFieldFormat.aspx程序,概要说明如下:
l 将订购Button按钮的DataTextField属性设置为“ProductName”,DataTextFormatString属性设置为“订购:{0}”,ControlStyle的Width属性设置为“200px”。
l 将取消Button按钮的DataTextField属性设置为“ProductName”,DataTextFormatString属性设置为“取消:{0}”,ControlStyle的Width属性设置为“200px”。运行结果如图9-24所示。
图9-24 ButtonField按钮字段格式化运行界面
9.8.4 CommandField命令按钮字段
CommandField命令按钮字段是显示预先定义好的按钮来运行Select、Edit、Update、Delete与Insert(DetailsView才支持Insert)的命令,因其具有运行命令的功能,故命名为“CommandField”,CommandField由于具备了以上诸多命令功能,故其能力与重要性远超过其他类型字段。
而外观上CommandField跟ButtonField很像,所以别被外观所混淆,两者之间最大的差异在于ButtonField只是单纯地显示Button按钮而不具备内置的命令,所以ButtonField必须自行撰写相关程序,反倒是善用CommandField内置的命令字段可以省掉各位不少写程序代码的力气。
CommandField命令字段的重要属性说明。
l GridView控件的CommandField命令按钮字段支持【编辑、更新、取消】、【选取】与【删除】三种命令按钮;而DetailsView的CommandField命令按钮字段则支持【编辑、更新、取消】、【删除】与【添加、插入、取消】三种命令按钮。
l 显示及隐藏命令按钮您可以设置ShowDeleteButton、ShowEditButton、ShowInsertButton与ShowSelectButton这几个属性(True或False)。
l 而设置不同命令按钮的文字标题可用的属性有SelectText、InsertText、UpdateText、DeleteText、CancelText、EditText、NewText。
l 若您将ButtonType属性设为ButtonType.Image,则可以设置按钮的图像Url属性,可供使用的有CancelImageUrl、DeleteImageUrl、EditImageUrl、InsertText、NewImageUrl、SelectImageUrl、UpdateImageUrl。
l CommandField命令按钮字段可设置的样式属性(Style)也同样有ControlStyle、FooterStyle、HeaderStyle、ItemStyle这四大类。
范例9-8 使用CommandField命令按钮字段
本范例将教您如何使用CommandField来建立命令按钮字段,以及与CommandField命令按钮字段相关属性的设置,请参考CommandField.aspx程序,步骤说明如下。
创建GridView及SqlDataSource控件
请创建GridView及SqlDataSource控件,并将GridView的ID属性命名为“gviewProduct”,SqlDataSource数据源请指定北风数据库的Products数据表中的ProductID、ProductName、UnitPrice、UnitsInStock四个数据字段,最后再指定GridView的数据源为SqlDataSource控件。但有一点要特别注意的是,若要让GridView的编辑、删除与更新起作用,必须要将SqlDataSource控件的SQL选项“生成INSERT、UPDATE和DELETE语句”打钩才行(见图9-25)。
图9-25 创建GridView及SqlDataSource控件
添加CommandField命令按钮字段
请在GridView智能标签中点击【编辑列】进入编辑模式,从可用的字段添加【选择】、【编辑、更新、取消】、【删除】三个CommandField命令字段到选取的字段,并将【编辑】与【删除】两个命令的ButtonType改为“Button”(见图9-26)。
图9-26 创建CommandField命令按钮字段
启用GridView命令功能
当完成STEP 2后,请在GridView智能标签中启用【启用编辑】、【启用删除】、【启用选定内容】这三项功能,将其复选框打钩(见图9-27)。
图9-27 启用GridView命令功能
取消GridView删除数据行功能
在此为避免数据的误删,将取消GridView删除数据行功能,而这项技巧同样可以运用权限的管理,有删除权限的人才能删除数据,否则任何删除操作都将会被取消,请在GridView的RowDeleting事件中添加下列程序代码:
01 ‘取消删除数据行
02 Protected Sub gviewProduct_RowDeleting(ByVal sender As Object, ByVal e As
System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles
gviewProduct.RowDeleting
03 e.Cancel = True
04 ‘Literal txtMsg = new Literal();
05 Dim txtMsg As New Literal()
06 txtMsg.Text = “”
07 Page.Controls.Add(txtMsg)
08 End Sub
完成后运行界面如图9-28所示。
图9-28 CommandField命令按钮字段运行界面
秘技放送
在这好向各位传达一个秘技,假设GridView的数据笔数很多,会遇到一个问题,就是无论您点击【选取】、【编辑】或【删除】按钮,网页Postback后,界面会进行refresh操作,通常页面会回到浏览器最顶端,往往这种现象会使得用户必须再滚动回到下面原来的位置,这样会造成用户的困扰,为了克服这个弱点,ASP.NET 2.0提供了“MaintainScrollPositionOnPostback”新属性,它的功用是网页Postback后界面重新refresh,仍会固定维持在原先的定位,这有什么用处呢?您可以尝试GridView不要启用分页,而浏览器显示GridView界面就会拉得很长很长,这时按下编辑按钮,如果将这个属性设置为true,则界面会乖乖地定在原来位置不会跑到最顶端,其语法如下: