测试项目
在生成菜单上单击生成解决方案
在调试菜单上单击开始执行(不调试)
现在可以在 Web 窗体页上显示数据库中的数据并可在浏览器中查看该数据Titles 列由超级链接组成在本演练的稍后部分您将能够单击这些超级链接之一并显示特定书籍的详细信息
在浏览器中查看 Titles 表
向 Web 窗体添加详细信息面板
详细信息面板使您可以查看有关所选书籍的其他信息而不会使 DataGrid 充斥各种无关的材料
在此步骤中将添加 DataView它使您可以筛选表以便只显示当前选定的行
添加 DataView
切换到 Web 窗体页设计视图
在视图菜单上单击工具箱
将一个 DataView 控件从数据选项卡拖到 Web 窗体设计器表面
一个新对象 dataView 被添加到 Web 窗体设计器表面的非可视部分
选择 dataView 对象并单击视图菜单上的属性窗口显示该对象的属性页
展开数据节点并选择 Table 属性单击下拉列表中的titles以链接该表如下图所示
名称 myDataSettitles 出现在 Table 属性的旁边
dataView 属性
在此步骤中添加与数据列相对应的 Label 控件并将每个 Label 绑定到 DataView
添加标签 (Label) 控件
对于所使用的每个明细字段(如 titleidtitleprice 和 pubdate)将一个 Label 控件从工具箱的Web 窗体选项卡拖到 Web 窗体设计器表面
选择每个标签并将其绑定到一个字段如下所示
单击视图菜单上的属性窗口以显示选定标签的属性页
展开数据属性
单击DataBindings(数据绑定)旁边的省略号 () 按钮以选择数据绑定属性页
出现Labeln 数据绑定对话框(这里的 n 是标签号)下图显示 Label 的对话框
从左窗格的可绑定属性中选择 Text 属性并从右窗格的 dataView 节点中选择适当的列
标签可绑定属性
从格式下拉列表中选择正确的格式例如对于 price 可以使用货币格式对于 pubdate 可以使用可用的日期格式之一
单击确定按钮
在每个标签前加上一个包含说明文本(例如书名 ID书名出版日期和价格)的 HTML Label 以添加描述这些标签的文本为此请打开工具箱将 Label 从HTML选项卡拖到 Web 窗体设计器表面将标签放在对应的绑定标签的前面并适当修改其文本重复此过程以创建四个标签
现在Web 窗体设计器表面看起来应该如下图所示
Web 窗体设计器表面
在此步骤中添加必要的代码以便在单击 DataGrid 时激活详细信息
激活详细信息
双击 DataGrid 对象
这将向代码隐藏文件添加 DataGrid_SelectedIndexChanged 事件处理程序并切换到代码视图
在 DataGrid_SelectedIndexChanged 方法中添加下列代码以设置 dataViewRowFilter使它只选择希望显示的行
// C#
myComponentFillDataSet(myDataSet);
int index = DataGridSelectedIndex;
string key = DataGridDataKeys[index]ToString();
dataViewRowFilter = DataGridDataKeyField + = + key + ;
Visual Basic
MyComponentFillDataSet(myDataSet)
Dim index As Integer
Dim key As String
index = DataGridSelectedIndex
key = DataGridDataKeys(index)ToString()
dataViewRowFilter = DataGridDataKeyField & = & key &
从概念上讲您所做的事情非常类似于指定 SQL 查询的 WHERE 子句并使用它仅从表中获取单个行在创建 DataGrid 时指定的 DataKeys 属性是唯一标识每一行的一种方法通过将项索引映射到匹配键来确定选定行的键值此键是有效的 title_id现在可以用于唯一选择要使用的行因为 title_id 是数据库的主键所以此方法可行对于其他的数据库或其他数据键不一定能够保证这些约束因此如果想在没有主键的表上使用此技术应该修改代码
在 DataGrid_SelectedIndexChanged 方法中通过对每个要使用的标签调用 DataBind() 来绑定该标签在设置行筛选器更改的后面放置这些调用
// C#
LabelDataBind();
LabelDataBind();
LabelDataBind();
LabelDataBind();
Visual Basic
LabelDataBind()
LabelDataBind()
LabelDataBind()
LabelDataBind()
生成和启动项目
单击一个标题以获取详细信息
使用 Visual C# 或 Visual Basic 创建业务对象
在本节中您将业务对象创建为 Visual C# 或 Visual Basic 类该类将包含通过计算特定书籍的优惠价格来实现业务规则的方法或子例程
使用 Visual C# 创建业务对象
在类视图中右击 MyWebForm
在快捷菜单上单击添加然后单击添加类
出现C# 添加类向导如下图所示
C# 添加类向导
在对话框中将类命名为 MyPaymentRules 并单击完成
在类视图中右击 MyPaymentRules 类
在快捷菜单上单击添加然后单击添加方法
C# 添加方法向导出现
C# 添加方法向导
在方法名称文本框中输入 CalcDiscount
从下拉列表中选择下列信息
参数类型:double
参数名:price
返回类型:double
单击添加然后单击完成
以下方法将被添加到 MyPaymentRules 类中
// C#
public double CalcDiscount(double price)
{
return ;
}
如下所示修改 return 语句
return * price;
使用 Visual Basic 创建业务对象
在解决方案资源管理器中右击 MyWebForm
在快捷菜单上单击添加然后单击添加类
出现添加新项对话框如下图所示
添加新项对话框
在添加新项对话框中将类文件的默认名称从 Classvb 更改为 MyPaymentRulesvb然后单击打开
随即创建 MyPaymentRulesvb 类
如果类代码尚不可见在解决方案资源管理器中双击 MyPaymentRulesvb 并将如下函数添加到类中
Visual Basic
Public Class MyPaymentRules
Add the following code
Dim price As Double
Public Function CalcDiscount(ByVal price As Double)
Return * price
End Function
End of the new code
End Class
使用业务对象
在本节中您将新的绑定标签添加到 Web 窗体页新标签显示包括 % 折扣的优惠价格
实现业务对象
将 WebForms Label 控件从工具箱拖到 Web 窗体设计器表面(它采用 ID Label)
此标签将显示优惠价格
将 Label 的文本属性绑定到 DataView 的价格列
不必使用特定的格式原因是格式将在代码中指定
将 HTML Label 控件从工具箱拖到 Web 窗体设计器表面并将其放在 Label 的前面
将标签文本更改为优惠价格
查看 WebFormaspxcs 文件(或 WebFormaspxvb 文件)并将下列代码添加到 DataGrid_SelectedIndexChanged 方法/子方法的结尾
// C#
// Declare an instance of the business object:
MyPaymentRules pr = new MyPaymentRules();
// Invoke the CalcDiscount Method:
try
{
decimal price = myDataSettitles[index]price;
LabelText = StringFormat({:C}
prCalcDiscount(ConvertToDouble(price)));
}
catch
{
// If the price is blank display a message:
LabelText = Price is not available for this item;
LabelText = Discount is not available for this item;
}
Visual Basic
Declare an instance of the business object
Dim pr As New MyPaymentRules()
Invoke the CalcDicount Method:
Try
Dim price As decimal