DataView 使用

来源:互联网 发布:黑马程序员论坛 编辑:程序博客网 时间:2024/06/12 01:06

DataView 直译是 数据视图。由数据库表(Table)映射到DataTable不难联想到 数据库视图 映射到 DataView。

 

数据库中视图是一个虚表,数据库中存储的只是一句查询SQL语句,每次程序访问此视图时,原理类似于执行此SQL语句,生成一个临时表,然后程序再对此临时表操作,结果对实表一样有效。

视图通常只是为了简化程序的查询操作,允许在一个实表上建立多个视图
同样的,DataView表示用于排序、筛选、搜索、编辑和导航的 DataTable 的可绑定数据的自定义视图。

 

举一个简单例子来说明它的作用。
有时候你想把DataTable的一部分数据绑定到控件1,而把DataTable的全部数据绑定到控件2,那么利用DataView可以简单地实现。

 

下面来看看DataView 的每个功能实现。

 

1、排序

    创建一个空页面Default.aspx,在页面中添加一个按钮和一个GridView控件

  1. <div>
  2.     <asp:Button ID="Button1" runat="server" Text="按id排序" OnClick="Button1_Click" />
  3.     <br />
  4.     <asp:GridView ID="GridView1" runat="server">
  5.     </asp:GridView>
  6. </div>

    在后台代码中,我们手动创建一个DataTable数据源,以下的操作都基于此数据源。如下

  1.     //创建数据源
  2.     private DataTable CreateTable()
  3.     {
  4.         DataTable dt = new DataTable();
  5.         dt.Columns.Add(new DataColumn("id"typeof(int)));
  6.         dt.Columns.Add(new DataColumn("name"typeof(string)));
  7.         int[] ids ={ 8, 5, 4, 3, 1, 9, 6, 7, 2 };
  8.         DataRow dr;
  9.         for (int i = 0; i < ids.Length; i++)
  10.         {
  11.             dr = dt.NewRow();
  12.             dr[0] = ids[i];
  13.             dr[1] = "not_" + ids[i].ToString();
  14.             dt.Rows.Add(dr);
  15.         }
  16.         return dt;
  17.     }

    在Page_Load中添加如下代码,初使化页面

  1.     protected void Page_Load(object sender, EventArgs e)
  2.     {
  3.         if (!IsPostBack)
  4.         {
  5.             if (ViewState["data"] == null)
  6.             {
  7.                 ViewState["data"] = CreateTable();
  8.             }
  9.             this.GridView1.DataSource = ViewState["data"as DataTable;
  10.             this.GridView1.DataBind();
  11.         }
  12.     }

对Button1的Click事件实现对ID列的排序

  1.     //排序
  2.     protected void Button1_Click(object sender, EventArgs e)
  3.     {
  4.         DataView dv;
  5.         if (ViewState["data"] != null)
  6.         {
  7.             dv = (ViewState["data"as DataTable).DefaultView;
  8.         }
  9.         else
  10.         {
  11.             dv = CreateTable().DefaultView;
  12.         }
  13.         //字符串不区分大小写
  14.         dv.Sort = "ID ASC";
  15.         this.GridView1.DataSource = dv;
  16.         this.GridView1.DataBind();
  17.     }

页面运行的初始状态如下

单击按钮后如下

 

可见排序的重点只是对 DataView.Sort 属性进行赋值 dv.Sort = "ID ASC";

2、筛选

    实现筛选主要是对DataView.RowFilter 属性操作。

    最简单的比如

    dv.RowFilter = "name > 'not_5'";

    但DataView.RowFilter 支持更为复杂的表达式,如

    dv.RowFilter = "id in (1,3,5,7)";

    dv.RowFilter = "name like 'not_5*'";

    更详细的可以参考 DataColumn.Expression 属性

    http://msdn.microsoft.com/zh-cn/library/system.data.datacolumn.expression.aspx

    

原创粉丝点击