转:DataView 使用

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

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

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

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

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

1、排序

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

<div>
    <asp:Button ID="Button1" runat="server" Text="按id排序" OnClick="Button1_Click" />
    <br />
    <asp:GridView ID="GridView1" runat="server">
    </asp:GridView>
</div>
    在后台代码中,我们手动创建一个DataTable数据源,以下的操作都基于此数据源。如下

    //创建数据源
    private DataTable CreateTable()
    {
        DataTable dt = new DataTable();
        dt.Columns.Add(new DataColumn("id", typeof(int)));
        dt.Columns.Add(new DataColumn("name", typeof(string)));

        int[] ids ={ 8, 5, 4, 3, 1, 9, 6, 7, 2 };
        DataRow dr;
        for (int i = 0; i < ids.Length; i++)
        {
            dr = dt.NewRow();
            dr[0] = ids[i];
            dr[1] = "not_" + ids[i].ToString();

            dt.Rows.Add(dr);
        }

        return dt;
    }
    在Page_Load中添加如下代码,初使化页面

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            if (ViewState["data"] == null)
            {
                ViewState["data"] = CreateTable();
            }

            this.GridView1.DataSource = ViewState["data"] as DataTable;
            this.GridView1.DataBind();
        }
    }
对Button1的Click事件实现对ID列的排序

    //排序
    protected void Button1_Click(object sender, EventArgs e)
    {
        DataView dv;
        if (ViewState["data"] != null)
        {
            dv = (ViewState["data"] as DataTable).DefaultView;
        }
        else
        {
            dv = CreateTable().DefaultView;
        }
        //字符串不区分大小写
        dv.Sort = "ID ASC";
        this.GridView1.DataSource = dv;
        this.GridView1.DataBind();
    }

页面运行的初始状态如下

单击按钮后如下

 

单击按钮后如下

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/bfcady/archive/2009/01/08/3735570.aspx

原文地址:https://www.cnblogs.com/wantingqiang/p/1700261.html