ASP.NET GridView_第一篇_分页并排序

分页并排序

<%@ Page Language="C#" %>

<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Web.UI" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>

    <script runat="server">
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                ViewState["Orderby"] = "c1";
                ViewState["Sort"] = "ASC";
                this.Bind();
            }
        }
        private void Bind()
        {
            DataTable dt = this.CreateDataSource();
            DataView dv = dt.DefaultView;
            string Orderby = (string)ViewState["Orderby"] + " " + (string)ViewState["Sort"];
            dv.Sort = Orderby;
            GridView1.DataSource = dv;
            GridView1.DataKeyNames = new string[] { "c1" };
            GridView1.DataBind();
        }
        private DataTable CreateDataSource()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("c1", typeof(int));
            dt.Columns.Add("c2", typeof(string));
            dt.Columns.Add("c3", typeof(string));
            for (int i = 0; i < 100; i++)
            {
                DataRow dr = dt.NewRow();
                dr[0] = i;
                dr[1] = i;
                dr[2] = i;
                dt.Rows.Add(dr);
            }
            return dt;
        }
        protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            GridView1.PageIndex = e.NewPageIndex;
            this.Bind();
        }
        protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
        {
            string Orderby = e.SortExpression;
            if (ViewState["Orderby"].ToString() == Orderby)
            {
                if (ViewState["Sort"].ToString() == "Desc")
                    ViewState["Sort"] = "ASC";
                else
                    ViewState["Sort"] = "Desc";
            }
            else
            {
                ViewState["Orderby"] = e.SortExpression;
            }
            this.Bind();
        }
    </script>

</head>
<body>
    <form id="form1" runat="server">
    <asp:GridView ID="GridView1" runat="server" OnSorting="GridView1_Sorting" AllowSorting="True"
        OnPageIndexChanging="GridView1_PageIndexChanging" AutoGenerateColumns="False"
        AllowPaging="True">
        <Columns>
            <asp:BoundField DataField="c1" HeaderText="列1" SortExpression="c1" />
            <asp:BoundField DataField="c2" HeaderText="列2" SortExpression="c2" />
            <asp:BoundField DataField="c3" HeaderText="列3" SortExpression="c3" />
        </Columns>
    </asp:GridView>
    </form>
</body>
</html>

说明

针对分页部分

(1) 在 Page_Load 事件里设置 GridView 的“分页(AllowPaging)”、“每页记录条数(PageSize)”、“自动产生列(AutoGenerateColumns)”属性,这些属性也可以直接在控件里设置;

(2) 然后从数据库中获得数据集,并设置主键,再绑定到控件;

(3) 主键可以不设置,设置主键主要是为了便于在 GridView 控件中利用主键直接定位到某条记录,如:GridView1.DataKeys[e.RowIndex].Value,对该记录进行编辑、修改和删除操作;

(4) 如果不设置主键,也可以从 GridView 单元格里直接获取数据 GridView1.Rows[i].Cells[i].toString(),如果 GridView 控件处于编辑状态,要将其转换成相应的控件类型;

(5) 默认情况下,处于编辑状态的 GridView 控件,每个单元格是 TextBox 控件。如果使用模板列,自定义每个单元格的控件,如单选框或复选框,则要进行相应的转换;

(6) 一般,若想获得某条记录某列的值,是通过模板列中控件的ID在 GridView 控件里进行查找,例如:

(CheckBox)GridView1.Rows[i].FindControl("CheckBox1");

含义:在 GridView 控件的第 i 行上,查找“ID”为“CheckBox1”的控件,并转换成 CheckBox 类型,这样就可以对这个单元格进行形如 CheckBox 控件的操作。

另外,无论何时你都可以遍历 GridView 的标题和网格内容。如下代码遍历 GridView 的标题:

            for (int i = 0; i <= GridView1.HeaderRow.Cells.Count - 1; i++)
            {
                string str = GridView1.HeaderRow.Cells[i].Text;
                // ......
            }
如下代码遍历 GridView 的内容:

            for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
            {
                for (int j = 1; j <= GridView1.HeaderRow.Cells.Count - 1; j++)
                {
                    string str = GridView1.Rows[i].Cells[j].Text;
                    // ......
                }
            }

(7) 对于数据分页,一般不采用ASP.NET自带的,比较难看,而是采用专门的分页控件。分页控件有各种式样,其实原理都一样,将SQL语句、当前页数和总页数保存到页面变量中,根据需要在页面上Render画出来。

针对排序部分

(1) 设置GridView控件的AutoGenerateColumns(是否自动产生列)和AllowSorting(是否允许排序)属性;

(2) 在GridView控件里用BoundField自定义绑定列(字段),并设置其属性DataField、HeaderText和SortExpression设置绑定列名、显示列名和排序字段;

(3) 在Page_Load事件里设置默认的排序字段和排序方式,绑定到控件;

(4) 实现排序功能必须使用数据集的视图。在自定义绑定函数Bind()中,使用DataTable数据集的视图DefaultView绑定控件,从页面的视图变量Sort和Order中获得当前的排序字段和排序方式,赋值给数据集视图DefaultView的成员变量Sort,绑定到控件;

(5) 最后,在GridView1_Sorting事件中,用e.SortExpression获得当前的排序字段,并根据实际改变排序字段和排序方式,绑定到控件。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值