当前位置:编程学习 > C#/ASP.NET >>

不用SQL语句查询DataTable中的数据

答案:     在实际编程工程中,常常遇到这样的情况:DataTable并不是数据库中的,或者DataTable尚未写到数据库,或者从数据库中读出的DataTable已经在本地被改动,又没有写回数据库(可能还要作其他改动),在这些情况下,要查询DataTable中的数据,强大的SQL语言就派不上用场了。
  
  有些.NET程序员采取在数据库中建立临时表等方法来解决这类查询问题。而我觉得这种方法不可行,其实只要用.NET类库中提供的DataView类的强大功能(主要是用它的RowFilter属性),就能方便地解决这类查询问题。下面就举一个具体的例子,来说明如何不用SQL语句,用DataView的RowFilter属性来查询。
  
  步骤一:建立一个C#的ASP.NET项目。先编写一个生成DataTable的函数MakeDataTable(),代码如下:
  
   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.

上一个:ATL Server 与 ASP.NET
下一个:ASP.NET 2.0中的登陆控件简介(3)

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,