private DataTable MakeTable()
{
//生成DataTable
System.Data.DataTable myDataTable = new DataTable("本地資料表");
DataColumn myDataColumn;
DataRow myDataRow;
//生成資料列 ID,商品名稱,商品價格
myDataColumn = new DataColumn();
myDataColumn.DataType = System.Type.GetType("System.Int32");
myDataColumn.ColumnName = "ID";
myDataColumn.ReadOnly = true;
myDataColumn.Unique = true;
myDataTable.Columns.Add(myDataColumn);
myDataColumn = new DataColumn();
myDataColumn.DataType = System.Type.GetType("System.String");
myDataColumn.ColumnName = "商品名稱";
myDataTable.Columns.Add(myDataColumn);
myDataColumn = new DataColumn();
myDataColumn.DataType =System.Type.GetType("System.Decimal");
myDataColumn.ColumnName = "商品價格";
myDataTable.Columns.Add(myDataColumn);
//為資料表添加資料行
myDataRow = myDataTable.NewRow();
myDataRow["id"] = 1;
myDataRow["商品名稱"] = "足球";
myDataRow["商品價格"] =57.5;
myDataTable.Rows.Add(myDataRow);
myDataRow = myDataTable.NewRow();
myDataRow["id"] = 2;
myDataRow["商品名稱"] = "籃球";
myDataRow["商品價格"] =64.5;
myDataTable.Rows.Add(myDataRow);
myDataRow = myDataTable.NewRow();
myDataRow["id"] = 3;
myDataRow["商品名稱"] = "網球";
myDataRow["商品價格"] =6.5;
myDataTable.Rows.Add(myDataRow);
myDataRow = myDataTable.NewRow();
myDataRow["id"] = 4;
myDataRow["商品名稱"] = "網球拍";
myDataRow["商品價格"] =388.5;
myDataTable.Rows.Add(myDataRow);
//傳回資料表
return myDataTable;
}
步驟二:在aspx前台頁面中添加一個DataGrid1,在背景代碼的Page_Load中編寫如下代碼:
if(!this.IsPostBack)
{
Session["Table"]=MakeTable();
DataGrid1.DataSource=(DataTable)Session["Table"];
DataGrid1.DataBind();
}
此時浏覽頁面,可以看到DataGrid中顯示的表中資料。
ID 商品名稱 商品價格
1 足球 57.5
2 籃球 64.5
3 網球 6.5
4 網球拍 388.5
步驟三:在aspx前台頁面添加一個用來查詢Label1,TextBox1和Button1。
步驟四:在查詢按鈕Button1單擊事件中添加如下代碼:
DataTable dt=(DataTable)Session["Table"];
//為資料表建立一個資料視圖
DataView dv = new DataView(dt);
//用RowFilter屬性進行模糊查詢
dv.RowFilter="商品名稱 LIKE'%"+TextBox1.Text.Trim()+"%'";
DataGrid1.DataSource = dv;
DataGrid1.DataBind();
運作頁面後在TextBox1中輸入“網”,按查詢按鈕後 ,DataGrid顯示的查詢結果如下:
ID 商品名稱 商品價格
3 網球 6.5
4 網球拍 388.5
步驟五:在aspx前台頁面上添加一個Label2控件,兩個TextBox控件-TextBox1和TextBox2,以及一個“查詢”按鈕,Button2,如下圖所示,用來查詢使用者輸入的價格範圍中在商品。
步驟六:在背景代碼中為Button2按鈕單擊事件添加如下如下代碼:
DataTable dt = (DataTable)Session["Table"];
DataView dv = new DataView(dt);
dv.RowFilter="商品價格>="+TextBox2.Text.Trim()+" AND 商品價格<="+TextBox3.Text.Trim();
DataGrid1.DataSource=dv;
DataGrid1.DataBind();
使用者在兩個文本框中輸入價格範圍,10,70後,DataGrid1中顯示的查詢結果如下:
ID 商品名稱 商品價格
1 足球 57.5
2 籃球 64.5
可見,用DataView的RowFilter屬性完全能達到SQL語句SELECT語句所實作的功能
RowFilter中的查詢語句與SQL語句中SELECT語句的文法和作用都極為相似,以下是摘自MSDN中關于RowFilter查詢語句的文法說明:
/
使用者定義的值可以用在将與列值進行比較的表達式内。字元串值應放在單引号内。日期值應放在磅符号 (#) 内。對于數值,允許使用小數和科學記數法。例如:
"FirstName = 'John'"
"Price <= 50.00"
"Birthdate < #1/31/82#"
對于包含枚舉值的列,将值強制轉換為整數資料類型。例如:
"EnumColumn = 5"
運算符
使用布爾值 AND、OR 和 NOT 運算符時允許串聯。可以使用括号來組合子句和強制優先級。AND 運算符優先于其他運算符。例如:
(LastName = 'Smith' OR LastName = 'Jones') AND FirstName = 'John'
在建立比較表達式時,允許使用下列運算符:
<
>
<=
>=
<>
=
IN
LIKE
在表達式中還支援下列算術運算符:
+(加)
-(減)
*(乘)
/(除)
%(模數)
字元串運算符
若要連接配接字元串,請使用 + 字元。字元串比較是否區分大小寫由 DataSet 類的 CaseSensitive 屬性的值來确定。但是,可以用 DataTable 類的 CaseSensitive 屬性重寫此值。
通配符
在 LIKE 比較中,* 和 % 兩者可以互換地作為通配符。如果 LIKE 子句中的字元串包含 * 或 %,那麼這些字元應用中括号([])對其進行轉義。如果子句中有中括号,那麼中括号字元應用中括号對其進行轉義(例如 [[] 或 []])。在模式的開頭和結尾,或者在模式的結尾,或在模式的開頭允許使用通配符。例如:
"ItemName LIKE '*product*'"
"ItemName LIKE '*product'"
"ItemName LIKE 'product*'"
在字元串的中間不允許使用通配符。例如,不允許 'te*xt'。
父/子關系引用
通過在列名稱前面加 Parent,就可以在表達式中引用父表。例如,Parent.Price 引用父表的名為 Price 的列。
通過在列名稱前面加一個 Child,就可以在表達式中引用子表中的列。但是,因為子關系可以傳回多行,是以必須在聚合函數中包括對子列的引用。例如,Sum(Child.Price) 将傳回子表中名為 Price 的列的總和。
如果某個表有多個子表,則文法是:Child(RelationName)。例如,如果某個表有兩個子表,它們的名稱分别為 Customers 和 Orders,則 DataRelation 對象被命名為 Customers2Orders,引用将為:
Avg(Child(Customers2Orders).Quantity)
聚合
支援下列聚合類型:
Sum(求和)
Avg(平均)
Min(最小值)
Max(最大值)
Count(計數)
StDev(統計标準偏差)
Var(統計方差)。
聚合通常沿着關系執行。通過使用上面列出的函數之一和上面“父/子關系引用”中詳述的子表列,來建立聚合表達式。例如:
Avg(Child.Price)
Avg(Child(Orders2Details).Price)
聚合也可以在單個表上執行。例如,若要為名為“Price”的列中的數字建立彙總,就用:
Sum(Price)