天天看點

DataView 用法

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) 
           

繼續閱讀