国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

[C#] DataView用法

2019-11-17 04:01:29
字體:
供稿:網(wǎng)友
在實(shí)際編程工程中,常常遇到這樣的情況:DataTable并不是數(shù)據(jù)庫中的,或者DataTable尚未寫到數(shù)據(jù)庫,或者從數(shù)據(jù)庫中讀出的DataTable已經(jīng)在本地被改動(dòng),又沒有寫回?cái)?shù)據(jù)庫(可能還要作其他改動(dòng)),在這些情況下,要查詢DataTable中的數(shù)據(jù),強(qiáng)大的SQL語言就派不上用場(chǎng)了。
   
   有些.NET程序員采取在數(shù)據(jù)庫中建立臨時(shí)表等方法來解決這類查詢問題。而我覺得這種方法不可行,其實(shí)只要用.NET類庫中提供的DataView類的強(qiáng)大功能(主要是用它的RowFilter屬性),就能方便地解決這類查詢問題。下面就舉一個(gè)具體的例子,來說明如何不用SQL語句,用DataView的RowFilter屬性來查詢。
   
   步驟一:建立一個(gè)C#的asp.net項(xiàng)目。先編寫一個(gè)生成DataTable的函數(shù)MakeDataTable(),代碼如下:
   
    PRivate DataTable MakeTable()
   
    {
   
    //生成DataTable
   
    System.Data.DataTable myDataTable = new DataTable("本地?cái)?shù)據(jù)表");
   
    DataColumn myDataColumn;
   
    DataRow myDataRow;
   
    //生成數(shù)據(jù)列 ID,商品名稱,商品價(jià)格
   
    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 = "商品價(jià)格";
   
    myDataTable.Columns.Add(myDataColumn);
   
   
   
    //為數(shù)據(jù)表添加數(shù)據(jù)行
   
    myDataRow = myDataTable.NewRow();
   
    myDataRow["id"] = 1;
   
    myDataRow["商品名稱"] = "足球";
   
    myDataRow["商品價(jià)格"] =57.5;
   
    myDataTable.Rows.Add(myDataRow);
   
   
   
    myDataRow = myDataTable.NewRow();
   
    myDataRow["id"] = 2;
   
    myDataRow["商品名稱"] = "籃球";
   
    myDataRow["商品價(jià)格"] =64.5;
   
    myDataTable.Rows.Add(myDataRow);
   
   
   
    myDataRow = myDataTable.NewRow();
   
    myDataRow["id"] = 3;
   
    myDataRow["商品名稱"] = "網(wǎng)球";
   
    myDataRow["商品價(jià)格"] =6.5;
   
    myDataTable.Rows.Add(myDataRow);
   
   
   
    myDataRow = myDataTable.NewRow();
   
    myDataRow["id"] = 4;
   
    myDataRow["商品名稱"] = "網(wǎng)球拍";
   
    myDataRow["商品價(jià)格"] =388.5;
   
    myDataTable.Rows.Add(myDataRow);
   
   
   
    //返回?cái)?shù)據(jù)表
   
    return myDataTable;
   
    }
   
   
   
   
   
   步驟二:在aspx前臺(tái)頁面中添加一個(gè)DataGrid1,在后臺(tái)代碼的Page_Load中編寫如下代碼:
   
   if(!this.IsPostBack)
   
    {
   
    session["Table"]=MakeTable();
   
    DataGrid1.DataSource=(DataTable)Session["Table"];
   
    DataGrid1.DataBind();
   
    }
   
   
   
   此時(shí)瀏覽頁面,可以看到DataGrid中顯示的表中數(shù)據(jù)。
   
   ID
   
   
   商品名稱
   
   
   商品價(jià)格
   
   1
   
   
   足球
   
   
   57.5
   
   2
   
   
   籃球
   
   
   64.5
   
   3
   
   
   網(wǎng)球
   
   
   6.5
   
   4
   
   
   網(wǎng)球拍
   
   
   388.5
   
   步驟三:在aspx前臺(tái)頁面添加一個(gè)用來查詢Label1,TextBox1和Button1。如下圖所示:
   
   步驟四:在查詢按鈕Button1單擊事件中添加如下代碼:
   
    DataTable dt=(DataTable)Session["Table"];
   
    //為數(shù)據(jù)表建立一個(gè)數(shù)據(jù)視圖
   
    DataView dv=new DataView(dt);
   
    //用RowFilter屬性進(jìn)行模糊查詢
   
    dv.RowFilter="商品名稱 LIKE'%"+TextBox1.Text.Trim()+"%'";
   
    DataGrid1.DataSource=dv;
   
    DataGrid1.DataBind();
   
   運(yùn)行頁面后在TextBox1中輸入“網(wǎng)”,按查詢按鈕后 ,DataGrid顯示的查詢結(jié)果如下:
   
   
   
   ID
   
   
   商品名稱
   
   
   商品價(jià)格
   
   3
   
   
   網(wǎng)球
   
   
   6.5
   
   4
   
   
   網(wǎng)球拍
   
   
   388.5
   
   步驟五:在aspx前臺(tái)頁面上添加一個(gè)Label2控件,兩個(gè)TextBox控件-TextBox1和TextBox2,以及一個(gè)“查詢”按鈕,Button2,如下圖所示,用來查詢用戶輸入的價(jià)格范圍中在商品。
   
   步驟六:在后臺(tái)代碼中為Button2按鈕單擊事件添加如下如下代碼:
   
   DataTable dt=(DataTable)Session["Table"];
   
   DataView dv=new DataView(dt);
   
    dv.RowFilter="商品價(jià)格>="+TextBox2.Text.Trim()+" AND 商品價(jià)格<="+TextBox3.Text.Trim();
   
    DataGrid1.DataSource=dv;
   
    DataGrid1.DataBind();
   
   
   
   用戶在兩個(gè)文本框中輸入價(jià)格范圍,10,70后,DataGrid1中顯示的查詢結(jié)果如下:
   
   
   
   ID
   
   
   商品名稱
   
   
   商品價(jià)格
   
   1
   
   
   足球
   
   
   57.5
   
   2
   
   
   籃球
   
   
   64.5
   
   
   
   可見,用DataView的RowFilter屬性完全能達(dá)到SQL語句SELECT語句所實(shí)現(xiàn)的功能
   
   RowFilter中的查詢語句與SQL語句中SELECT語句的語法和作用都極為相似,以下是摘自MSDN中關(guān)于RowFilter查詢語句的語法說明:
   
   /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
   
   用戶定義的值可以用在將與列值進(jìn)行比較的表達(dá)式內(nèi)。字符串值應(yīng)放在單引號(hào)內(nèi)。日期值應(yīng)放在磅符號(hào) (#) 內(nèi)。對(duì)于數(shù)值,允許使用小數(shù)和科學(xué)記數(shù)法。例如:
   
   
   
   "FirstName = 'John'"
   
   
   
   "Price <= 50.00"
   
   
   
   "Birthdate < #1/31/82#"
   
   
   
   對(duì)于包含枚舉值的列,將值強(qiáng)制轉(zhuǎn)換為整數(shù)數(shù)據(jù)類型。例如:
   
   
   
   "EnumColumn = 5"
   
   
   
   運(yùn)算符
   
   
   
   使用布爾值 AND、OR 和 NOT 運(yùn)算符時(shí)允許串聯(lián)。可以使用括號(hào)來組合子句和強(qiáng)制優(yōu)先級(jí)。AND 運(yùn)算符優(yōu)先于其他運(yùn)算符。例如:
   
   
   
   (LastName = 'Smith' OR LastName = 'Jones') AND FirstName = 'John'
   
   
   
   在創(chuàng)建比較表達(dá)式時(shí),允許使用下列運(yùn)算符:
   
   
   
   <
   
   
   
   >
   
   
   
   <=
   
   
   
   >=
   
   
   
   <>
   
   
   
   =
   
   
   
   IN
   
   
   
   LIKE
   
   
   
   在表達(dá)式中還支持下列算術(shù)運(yùn)算符:
   
   
   
   +(加)
   
   
   
   -(減)
   
   
   
   *(乘)
   
   
   
   /(除)
   
   
   
   %(模數(shù))
   
   
   
   字符串運(yùn)算符
   
   
   
   若要連接字符串,請(qǐng)使用 + 字符。字符串比較是否區(qū)分大小寫由 DataSet 類的 CaseSensitive 屬性的值來確定。但是,可以用 DataTable 類的 CaseSensitive 屬性重寫此值。
   
   
   
   通配符
   
   
   
   在 LIKE 比較中,* 和 % 兩者可以互換地作為通配符。如果 LIKE 子句中的字符串包含 * 或 %,那么這些字符應(yīng)用中括號(hào)([])對(duì)其進(jìn)行轉(zhuǎn)義。如果子句中有中括號(hào),那么中括號(hào)字符應(yīng)用中括號(hào)對(duì)其進(jìn)行轉(zhuǎn)義(例如 [[] 或 []])。在模式的開頭和結(jié)尾,或者在模式的結(jié)尾,或在模式的開頭允許使用通配符。例如:
   
   
   
   "ItemName LIKE '*product*'"
   
   
   
   "ItemName LIKE '*product'"
   
   
   
   "ItemName LIKE 'product*'"
   
   
   
   在字符串的中間不允許使用通配符。例如,不允許 'te*xt'。
   
   
   
   父/子關(guān)系引用
   
   
   
   通過在列名稱前面加 Parent,就可以在表達(dá)式中引用父表。例如,Parent.Price 引用父表的名為 Price 的列。
   
   
   
   通過在列名稱前面加一個(gè) Child,就可以在表達(dá)式中引用子表中的列。但是,因?yàn)樽雨P(guān)系可以返回多行,所以必須在聚合函數(shù)中包括對(duì)子列的引用。例如,Sum(Child.Price) 將返回子表中名為 Price 的列的總和。
   
   
   
   如果某個(gè)表有多個(gè)子表,則語法是:Child(RelationName)。例如,如果某個(gè)表有兩個(gè)子表,它們的名稱分別為 Customers 和 Orders,則 DataRelation 對(duì)象被命名為 Customers2Orders,引用將為:
   
   
   
   Avg(Child(Customers2Orders).Quantity)
   
   
   
   聚合
   
   
   
   支持下列聚合類型:
   
   
   
   Sum(求和)
   
   
   
   Avg(平均)
   
   
   
   Min(最小值)
   
   
   
   Max(最大值)
   
   
   
   Count(計(jì)數(shù))
   
   
   
   StDev(統(tǒng)計(jì)標(biāo)準(zhǔn)偏差)
   
   
   
   Var(統(tǒng)計(jì)方差)。
   
   
   
   聚合通常沿著關(guān)系執(zhí)行。通過使用上面列出的函數(shù)之一和上面“父/子關(guān)系引用”中詳述的子表列,來創(chuàng)建聚合表達(dá)式。例如:
   
   
   
   Avg(Child.Price)
   
   
   
   Avg(Child(Orders2Details).Price)
   
   
   
   聚合也可以在單個(gè)表上執(zhí)行。例如,若要為名為“Price”的列中的數(shù)字創(chuàng)建匯總,就用:
   
   
   
   Sum(Price) 
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 新干县| 宁安市| 东安县| 巢湖市| 方山县| 九江市| 蒲江县| 吉水县| 侯马市| 仁怀市| 汉阴县| 新竹市| 奉化市| 饶河县| 长沙市| 区。| 城市| 六枝特区| 庄浪县| 雷州市| 宜春市| 五台县| 城口县| 徐汇区| 伊吾县| 远安县| 西昌市| 时尚| 卢湾区| 大庆市| 磐石市| 宣城市| 神农架林区| 宁河县| 平顶山市| 盱眙县| 临桂县| 定兴县| 嘉兴市| 定南县| 老河口市|