`
guoyueqing
  • 浏览: 34947 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

GridView的標題欄、列凍結效果(跨瀏覽器版)

阅读更多
不甘心事情只做一半,又挖了一下,驚喜地發現另一個版本: Super Tables,可以支援Firefox 2+, Internet Explorer 5.5+, Safari 3+, Opera 9+ 以及Chrome,而且也支援直欄的凍結效果,在功能上大勝ScrollableTable,二話不說,通通包起來。

SuperTable的原理與ScrollableTable不同,它需要額外的CSS以及在Table外包一層<div>,可視範圍大小由<div> Style決定,設定時參數也較多(如:fixedCols, headerRows...),所以我寫了一個jQuery Plugin(jquery.superTable.js)把它包起來。有了Plugin的加持,只要一個toSuperTable(options)就可立即升級成有凍結效果的GridView了。

排版顯示純文字複製文字
/////////////////////////////////////////////////////////////////////////////////////////// Super Tables Plugin for jQuery - MIT Style License// Copyright (c) 2009 Jeffrey Lee --- blog.darkthread.net//// A wrapper for Matt Murphy's Super Tables http://www.matts411.com/post/super_tables///// Contributors:///////////////////////////////////////////////////////////////////////////////////////////////// TO CALL: // $("...").toSuperTable(options)//////// OPTIONS: (order does not matter )// cssSkin : string ( eg. "sDefault", "sSky", "sOrange", "sDark" )// headerRows : integer ( default is 1 )// fixedCols : integer ( default is 0 )// colWidths : integer array ( use -1 for auto sizing )// onStart : function ( any this.variableNameHere variables you create here can be used later ( eg. onFinish function ) )// onFinish : function ( all this.variableNameHere variables created in this script can be used in this function )// margin, padding, width, height, overflow...: Styles for "fakeContainer"//////// Example:// $("#GridView1").toSuperTable(//              { width: "640px", height: "480px", fixedCols: 2,//                onFinish: function() { alert('Done!'); } }) (function($) {    $.fn.extend(            {                toSuperTable: function(options) {                    var setting = $.extend(                    {                        width: "640px", height: "320px",                        margin: "10px", padding: "0px",                        overflow: "hidden", colWidths: undefined,                        fixedCols: 0, headerRows: 1,                        onStart: function() { },                        onFinish: function() { },                        cssSkin: "sSky"                    }, options);                    return this.each(function() {                        var q = $(this);                        var id = q.attr("id");                        q.removeAttr("style").wrap("<div id='" + id + "_box'></div>");                         var nonCssProps = ["fixedCols", "headerRows", "onStart", "onFinish", "cssSkin", "colWidths"];                        var container = $("#" + id + "_box");                         for (var p in setting) {                            if ($.inArray(p, nonCssProps) == -1) {                                container.css(p, setting[p]);                                delete setting[p];                            }                        }                                                var mySt = new superTable(id, setting);                     });                }            });})(jQuery);/////////////////////////////////////////////////////////////////////////////////////////
// Super Tables Plugin for jQuery - MIT Style License
// Copyright (c) 2009 Jeffrey Lee --- blog.darkthread.net
//
// A wrapper for Matt Murphy's Super Tables http://www.matts411.com/post/super_tables/
//
// Contributors:
//
/////////////////////////////////////////////////////////////////////////////////////////
////// TO CALL:
// $("...").toSuperTable(options)
//
////// OPTIONS: (order does not matter )
// cssSkin : string ( eg. "sDefault", "sSky", "sOrange", "sDark" )
// headerRows : integer ( default is 1 )
// fixedCols : integer ( default is 0 )
// colWidths : integer array ( use -1 for auto sizing )
// onStart : function ( any this.variableNameHere variables you create here can be used later ( eg. onFinish function ) )
// onFinish : function ( all this.variableNameHere variables created in this script can be used in this function )
// margin, padding, width, height, overflow...: Styles for "fakeContainer"
//
////// Example:
// $("#GridView1").toSuperTable(
//              { width: "640px", height: "480px", fixedCols: 2,
//                onFinish: function() { alert('Done!'); } })

(function($) {
    $.fn.extend(
            {
                toSuperTable: function(options) {
                    var setting = $.extend(
                    {
                        width: "640px", height: "320px",
                        margin: "10px", padding: "0px",
                        overflow: "hidden", colWidths: undefined,
                        fixedCols: 0, headerRows: 1,
                        onStart: function() { },
                        onFinish: function() { },
                        cssSkin: "sSky"
                    }, options);
                    return this.each(function() {
                        var q = $(this);
                        var id = q.attr("id");
                        q.removeAttr("style").wrap("<div id='" + id + "_box'></div>");

                        var nonCssProps = ["fixedCols", "headerRows", "onStart", "onFinish", "cssSkin", "colWidths"];
                        var container = $("#" + id + "_box");

                        for (var p in setting) {
                            if ($.inArray(p, nonCssProps) == -1) {
                                container.css(p, setting[p]);
                                delete setting[p];
                            }
                        }
                       
                        var mySt = new superTable(id, setting);

                    });
                }
            });
})(jQuery);
完整的Demo程式如下:

排版顯示純文字複製文字
<%@ Page Language="C#" %><%@ Import Namespace="System.Data" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><script runat="server">    protected void Page_Load(object sender, EventArgs e)    {        DataTable t = new DataTable();        t.Columns.Add("序號", typeof(int));        t.Columns.Add("料號", typeof(string));        t.Columns.Add("單價", typeof(decimal));        for (int i = 1; i <= 10; i++)            t.Columns.Add("庫存" + i, typeof(int));        Random rnd = new Random();        for (int i = 0; i < 80; i++)        {            DataRow row = t.NewRow();            row["序號"] = i + 1;            row["料號"] = Guid.NewGuid().ToString().Substring(0, 13).ToUpper();            row["單價"] = rnd.NextDouble() * 100;            for (int j = 1; j <= 10; j++)                row["庫存" + j] = rnd.Next(10000);            t.Rows.Add(row);                    }        GridView1.AutoGenerateColumns = false;        foreach (DataColumn c in t.Columns)        {            BoundField bf = new BoundField();            bf.DataField = c.ColumnName;            bf.HeaderText = c.ColumnName;            if (c.DataType == typeof(decimal))                bf.DataFormatString = "{0:#,0.00}";            else if (c.DataType == typeof(int))                bf.DataFormatString = "{0:#,0}";            bf.ItemStyle.HorizontalAlign =                (!string.IsNullOrEmpty(bf.DataFormatString)) ?                HorizontalAlign.Right : HorizontalAlign.Center;                            GridView1.Columns.Add(bf);        }        GridView1.DataSource = t;        GridView1.DataBind();    }</script> <html xmlns="http://www.w3.org/1999/xhtml"><head runat="server">    <title></title>    <style type="text/css">    .altRow { background-color: #ddddff; }    </style>    <link href="superTables.css" rel="stylesheet" type="text/css" />    <script type="text/javascript" src="jquery-1.3.1.js"></script>    <script type="text/javascript" src="superTables.js"></script>    <script type="text/javascript" src="jquery.superTable.js"></script>    <script type="text/javascript">        $(function() {            $("#GridView1").toSuperTable({ width: "640px", height: "480px", fixedCols: 2 })            .find("tr:even").addClass("altRow");        });    </script></head><body>    <form id="form1" runat="server">    <asp:GridView ID="GridView1" runat="server" Font-Size="9pt" EnableViewState="false">    </asp:GridView>    </form></body></html><%@ Page Language="C#" %>
<%@ Import Namespace="System.Data" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
    protected void Page_Load(object sender, EventArgs e)
    {
        DataTable t = new DataTable();
        t.Columns.Add("序號", typeof(int));
        t.Columns.Add("料號", typeof(string));
        t.Columns.Add("單價", typeof(decimal));
        for (int i = 1; i <= 10; i++)
            t.Columns.Add("庫存" + i, typeof(int));
        Random rnd = new Random();
        for (int i = 0; i < 80; i++)
        {
            DataRow row = t.NewRow();
            row["序號"] = i + 1;
            row["料號"] = Guid.NewGuid().ToString().Substring(0, 13).ToUpper();
            row["單價"] = rnd.NextDouble() * 100;
            for (int j = 1; j <= 10; j++)
                row["庫存" + j] = rnd.Next(10000);
            t.Rows.Add(row);           
        }
        GridView1.AutoGenerateColumns = false;
        foreach (DataColumn c in t.Columns)
        {
            BoundField bf = new BoundField();
            bf.DataField = c.ColumnName;
            bf.HeaderText = c.ColumnName;
            if (c.DataType == typeof(decimal))
                bf.DataFormatString = "{0:#,0.00}";
            else if (c.DataType == typeof(int))
                bf.DataFormatString = "{0:#,0}";
            bf.ItemStyle.HorizontalAlign =
                (!string.IsNullOrEmpty(bf.DataFormatString)) ?
                HorizontalAlign.Right : HorizontalAlign.Center;
               
            GridView1.Columns.Add(bf);
        }
        GridView1.DataSource = t;
        GridView1.DataBind();
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <style type="text/css">
    .altRow { background-color: #ddddff; }
    </style>
    <link href="superTables.css" rel="stylesheet" type="text/css" />
    <script type="text/javascript" src="jquery-1.3.1.js"></script>
    <script type="text/javascript" src="superTables.js"></script>
    <script type="text/javascript" src="jquery.superTable.js"></script>
    <script type="text/javascript">
        $(function() {
            $("#GridView1").toSuperTable({ width: "640px", height: "480px", fixedCols: 2 })
            .find("tr:even").addClass("altRow");
        });
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <asp:GridView ID="GridView1" runat="server" Font-Size="9pt" EnableViewState="false">
    </asp:GridView>
    </form>
</body>
</html>
分享到:
评论

相关推荐

    GRIDVIEW实现EXCEL列冻结功能

    4. **应用样式**:当滚动条达到一定的位置后(即超过了需要冻结的列的初始位置),给冻结列添加特定的样式,使其相对于容器固定。 #### 具体实现 根据题目提供的代码片段,我们可以进一步解析实现步骤: 1. **...

    gridview冻结表头和列

    为了解决这个问题,我们可以实现“gridview冻结表头和列”的功能,确保表头和特定列在滚动时始终保持固定。 GridView 控件是ASP.NET中的一个强大组件,它允许我们以网格形式显示数据源中的数据,并提供了丰富的...

    GridView固定表头和列 实例(GridView冻结表头和列)

    GridView冻结表头和列的需求在大数据量展示时尤为重要,因为表头的可见性有助于用户在浏览过程中始终了解列对应的数据含义。以下将详细介绍如何实现这一功能。 首先,我们需要在页面上添加一个GridView控件,并设置...

    GridView 冻结列和行

    GridView是ASP.NET中一个常用的控件,用于...总之,GridView冻结列和行是提高数据展示可读性的有效手段,开发者可以根据实际情况选择合适的方法实现。无论是前端还是后端的解决方案,都需要充分考虑用户体验和性能。

    gridview固定冻结列与表头

    因此,“gridview固定冻结列与表头”这一功能变得尤为重要。 固定列和表头的主要目的是在用户滚动页面时保持某些列(通常是第一列或最左边的列)和表头可见,以便始终保持对数据结构的清晰理解。实现这一功能通常...

    asp.net实现固定GridView标题栏的方法(冻结列功能)

    为了提高用户体验,尤其是在处理大量数据展示的时候,经常会需要实现一种称为“冻结列”或“固定标题栏”的功能。这个功能可以使表格的标题栏在页面滚动时保持固定位置,以便用户在滚动查看数据时仍能清楚地识别每一...

    Gridview冻结列.rar

    在这个“Gridview冻结列.rar”压缩包中,我们主要关注的是如何在Gridview滚动时保持前几列固定不动,也就是实现列冻结的功能。这个功能在大数据量且需要横向滚动的表格中特别有用,因为它能确保用户始终能看到关键列...

    asp.net gridview 固定标题和列

    在描述中提到的“asp.net gridview 固定标题和列”,指的是如何在GridView中实现标题行和列在用户滚动时始终保持可见,这种效果通常被称为冻结列或冻结头。以下将详细讲解如何在ASP.NET中实现GridView的固定标题和列...

    Gridview 固定行与列 冻结表头和列 jquery实现 兼容IE10 谷歌 火狐

    之前上传一个资源css冻结表头冻结第一列,有评论说有些浏览器不兼容,针对这一问题用jquery来解决冻结行和列的兼容问题。 Gridview 固定行与列,jquery实现 兼容IE6-IE10,谷歌,火狐等多种常用版本浏览器。 asp.net...

    重写Asp.net中GridView,增加冻结窗口等多项功能

    一个多功能的GridView,在asp.net原有的GridView上增加了11个新功能,包括分组,冻结窗口,鼠标事件,复合排序,联动复选框,响应行的单击事件和双击事件,行右键菜单,自定义分页样式,合并指定列的相邻且内容相同的单元格等...

    Asp.net GridView标题列可拖动调整宽度效果实现

    Asp.net GridView标题列可拖动调整宽度效果实现,实现效果类似于Winform中的ListView控件拖动标题,必变列宽,但界面与listview控件不一样,需要自己改变gridivew样式,具体是根据js插件实现;

    固定GridView首行或列(修改)

    本篇文章将详细介绍如何通过修改来实现GridView的首行或列固定效果。 首先,理解需求:固定首行意味着始终保持表头(通常包含列名)在可视区域顶部,而固定首列则是让第一列的数据在左右滚动时始终保持在屏幕左侧。...

    GridView动态添加模板列

    GridView动态添加模板列知识点汇总 在 ASP.NET 中,GridView控件是最常用的数据展示控件之一,然而,在实际开发中,我们经常需要根据不同的业务需求动态添加模板列,以满足不同的数据展示需求。那么,如何动态添加...

    RecyclerView 实现跨列的GridView

    在传统的GridView中,我们通常会设置固定的列数,但有时我们需要实现一种效果,使得视图可以根据屏幕大小动态调整列数,这就涉及到了如何使用RecyclerView实现跨列的GridView。下面将详细讲解这一知识点。 首先,...

    gridview 冻结列

    用c#连接oracle 数据库,gridview显示oracle内容,数据量大时,可以实现gridview 某列始终显示

    android仿新闻标题栏【水平GridView与VIewpager结合】

    在这个项目中,我们看到标题栏的实现是通过将水平`GridView`与`ViewPager`相结合来完成的。这个组合可以提供一个滑动切换的标题效果,使用户能够轻松浏览多个页面或频道。 首先,`GridView`是Android中的一种布局...

    asp.net webform冻结列 冻结表头 复杂表头

    冻结列是指在表格中固定某些列的位置,使其不会随着水平滚动条的移动而消失;而冻结表头则是指在垂直滚动时保持表头始终在视口顶部,便于用户在浏览长列表时跟踪列对应的数据。 在ASP.NET WebForm中,我们可以利用...

    C#中GridView动态添加列的实现方法

    在某些情况下,我们可能需要根据不同的业务需求,动态地向GridView中添加列。这在处理不确定数量或类型的数据时尤其有用。下面我们将详细介绍如何在C#中实现GridView动态添加列。 首先,我们来看一个简单的例子。在...

    gridview css 冻结列

    纯粹的css设置gridview冻结表头和列,包括列、行合并,个网上找的那些方法都不行,自己实现了好久终于实现了,和大家分享一下

Global site tag (gtag.js) - Google Analytics