測試項目
在
生成
菜單上
單擊
生成解決方案
在
調試
菜單上單擊
開始執行(不調試)
現在可以在 Web 窗體頁上顯示數據庫中的數據並可在浏覽器中查看該數據
Titles 列由超級鏈接組成
在本演練的稍後部分
您將能夠單擊這些超級鏈接之一
並顯示特定書籍的詳細信息
在浏覽器中查看 Titles 表
向 Web 窗體添加詳細信息面板
詳細信息面板使您可以查看有關所選書籍的其他信息
而不會使 DataGrid 充斥各種無關的材料
在此步驟中
將添加 DataView
它使您可以篩選表以便只顯示當前選定的行
添加 DataView
切換到 Web 窗體頁設計視圖
在
視圖
菜單上單擊
工具箱
將一個 DataView 控件從
數據
選項卡拖到 Web 窗體設計器表面
一個新對象 dataView
被添加到 Web 窗體設計器表面的非可視部分
選擇 dataView
對象
並單擊
視圖
菜單上的
屬性窗口
顯示該對象的
屬性
頁
展開
數據
節點並選擇 Table 屬性
單擊下拉列表中的
titles
以鏈接該表
如下圖所示
名稱 myDataSet
titles 出現在 Table 屬性的旁邊
dataView
屬性
在此步驟中
添加與數據列相對應的 Label 控件並將每個 Label 綁定到 DataView
添加標簽 (Label) 控件
對於所使用的每個明細字段(如 title
id
title
price 和 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 方法中
添加下列代碼以設置 dataView
RowFilter
使它只選擇希望顯示的行
// C#
myComponent
FillDataSet(myDataSet
);
int index = DataGrid
SelectedIndex;
string key = DataGrid
DataKeys[index]
ToString();
dataView
RowFilter = DataGrid
DataKeyField +
=
+ key +
;
Visual Basic
MyComponent
FillDataSet(myDataSet
)
Dim index As Integer
Dim key As String
index = DataGrid
SelectedIndex
key = DataGrid
DataKeys(index)
ToString()
dataView
RowFilter = DataGrid
DataKeyField &
=
& key &
從概念上講
您所做的事情非常類似於指定 SQL 查詢的 WHERE 子句
並使用它僅從表中獲取單個行
在創建 DataGrid 時指定的 DataKeys 屬性是唯一標識每一行的一種方法
通過將項索引映射到匹配鍵來確定選定行的鍵值
此鍵是有效的 title_id
現在可以用於唯一選擇要使用的行
因為 title_id 是數據庫的主鍵
所以此方法可行
對於其他的數據庫或其他數據鍵
不一定能夠保證這些約束
因此
如果想在沒有主鍵的表上使用此技術
應該修改代碼
在 DataGrid
_SelectedIndexChanged 方法中
通過對每個要使用的標簽調用 DataBind() 來綁定該標簽
在設置行篩選器更改的後面放置這些調用
// C#
Label
DataBind();
Label
DataBind();
Label
DataBind();
Label
DataBind();
Visual Basic
Label
DataBind()
Label
DataBind()
Label
DataBind()
Label
DataBind()
生成和啟動項目
單擊一個標題以獲取詳細信息
使用 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
在快捷菜單上單擊
添加
然後單擊
添加類
出現
添加新項
對話框
如下圖所示
添加新項
對話框
在
添加新項
對話框中
將類文件的默認名稱從 Class
vb 更改為 MyPaymentRules
vb
然後單擊
打開
隨即創建 MyPaymentRules
vb 類
如果類代碼尚不可見
在
解決方案資源管理器
中雙擊 MyPaymentRules
vb 並將如下函數添加到類中
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
的前面
將標簽文本更改為
優惠價格
查看 WebForm
aspx
cs 文件(或 WebForm
aspx
vb 文件)並將下列代碼添加到 DataGrid
_SelectedIndexChanged 方法/子方法的結尾
// C#
// Declare an instance of the business object:
MyPaymentRules pr = new MyPaymentRules();
// Invoke the CalcDiscount Method:
try
{
decimal price = myDataSet
titles[index]
price;
Label
Text = String
Format(
{
:C}
pr
CalcDiscount(Convert
ToDouble(price)));
}
catch
{
// If the price is blank
display a message:
Label
Text =
Price is not available for this item
;
Label
Text =
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
From:http://tw.wingwit.com/Article/program/net/201311/13481.html