css – SPGridView中的冻结(锁定)列

我在SPGridView中看到了许多冻结列的例子,但我不知道为什么它们都不适用于我.我的意思是 – 没有冻结.

我将很感激地看一下我的代码.

下面是准备启动的代码片段.它必须适用于IE 8(其他浏览器无关紧要).

我将提供100分的解决方案,这将有效.

样式

/* Locks the left column */

td.locked,th.locked {

font-size: 7pt;

text-align: left;

background-color:inherit;

color:Black;

position:relative;

cursor: default;

left: expression(document.getElementById("div-datagrid").scrollLeft-2); /*IE5+ only*/

}

/* Locks table header */

th {

font-size: 7pt;

font-weight: bold;

text-align: center;

background-color: navy;

color: white;

height:15pt;

border-right: 1px solid silver;

position:relative;

cursor: default;

top: expression(document.getElementById("div-datagrid").scrollTop-2); /*IE5+ only*/

z-index: 10;
}


/*
div#div-datagrid {
width: 420px;
height: 200px;
overflow: auto;
scrollbar-base-color:#ffeaff;
}
*/
/*
.container 
{
    overflow:auto;
    margin-left:10px;
    height:300px; 
    width:710px;
 }
*/

div#div-datagrid {
width: 500px;
height: 300px;
overflow: auto;
scrollbar-base-color:#ffeaff;
}

/* Locks the left column */
td.locked,th.locked {
font-size: 14px;
font-weight: bold;
text-align: center;
background-color: navy;
color: white;
border-right: 1px solid silver;
position:relative;
cursor: default;
/*IE5+ only*/
left: expression(document.getElementById("div-datagrid").scrollLeft-2);
}

/* Locks table header */
th {
font-size: 14px;
font-weight: bold;
text-align: center;
background-color: navy;
color: white;
border-right: 1px solid silver;
position:relative;
cursor: default;
/*IE5+ only*/
top: expression(document.getElementById("div-datagrid").scrollTop-2);
z-index: 10;
}

/* Keeps the header as the top most item. Important for top left item*/
th.locked {z-index: 99;}

/* DataGrid Item and AlternatingItem Style*/
.GridRow {font-size: 10pt; color: black; font-family: Arial;
             background-color:#ffffff; height:35px;}
.GridAltRow {font-size: 10pt; color: black; font-family: Arial;
             background-color:#eeeeee; height:35px;}

代码隐藏:

using System;
using System.ComponentModel;
using System.Data;
using System.Data.sqlClient;
using System.IO;
using System.Web;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;

    namespace MySPGridView.VisualWebPart1
    {
        [ToolBoxItemAttribute(false)]
        public class VisualWebPart1 : WebPart
        {
            // Visual Studio might automatically update this path when you change the Visual Web Part project item.
            private const string _ascxPath = @"~/_CONTROLTEMPLATES/FirstSPGridView/SPGridViewWebPartTest/VisualWebPart1UserControl.ascx";

            SPGridView _grid;


            private ObjectDataSource gridDS;




            protected override void CreateChildControls()
            {

                base.CreateChildControls();
                try
                {
                    SPSite mySite = SPContext.Current.Site;
                    SPWeb myWeb = mySite.OpenWeb();

                    //Using RunWithElevatedPrivileges

                    SPSecurity.RunWithElevatedPrivileges(delegate()
                    {
                        using (SPSite sitecollection = new SPSite(mySite.ID))
                        {
                            using (SPWeb web = sitecollection.OpenWeb(myWeb.ID))
                            {
                                const string GRIDID = "grid";
                                const string DATASOURCEID = "gridDS";

                                gridDS = new ObjectDataSource();
                                gridDS.ID = DATASOURCEID;
                                gridDS.SelectMethod = "SelectData";
                                gridDS.TypeName = this.GetType().AssemblyQualifiedname;
                                gridDS.ObjectCreating += new ObjectDataSourceObjectEventHandler(gridDS_ObjectCreating);

                                this.Controls.Add(gridDS);

                                _grid = new SPGridView();
                                _grid.RowDataBound += GridView1_RowDataBound;
                                _grid.AutoGenerateColumns = false;
                                _grid.ID = GRIDID;
                                _grid.DataSourceID = gridDS.ID;
                                _grid.AutoGenerateColumns = false;

                                HtmlGenericControl div = new HtmlGenericControl("div");
                                div.Attributes.Add("id","div-datagrid");

                                div.Controls.Add(_grid);
                                Controls.Add(div);


                            }
                        }
                    });
                }
                catch (Exception ex)
                {
                    throw new NotImplementedException();
                }


            }


            protected sealed override void LoadViewState(object savedState)
            {
                base.LoadViewState(savedState);

            }

            private void gridDS_ObjectCreating(object sender,ObjectDataSourceEventArgs e)
            {
                e.ObjectInstance = this;
            }

            protected override void OnPreRender(EventArgs e)
            {

                CssRegistration css = new CssRegistration();
                css.After = "corev4.css";

                css.Name = "CustomStyle.css";
                this.Controls.Add(css);
            }


            protected sealed override void Render(HtmlTextWriter writer)
            {
                try
                {
                    GenerateColumns();
                    _grid.DataBind();
                    LockColumns();
                    base.Render(writer);
                }
                catch (Exception e)
                {
                    throw new NotImplementedException();
                }
            }


            private void GenerateColumns()
            {

                BoundField clientNameColumn = new BoundField();
                clientNameColumn.HeaderText = "Client";
                clientNameColumn.datafield = "LastName";
                clientNameColumn.sortExpression = "LastName";
                _grid.Columns.Add(clientNameColumn);


                BoundField birthDayColumn = new BoundField();
                birthDayColumn.HeaderText = "BirthDate";
                birthDayColumn.datafield = "BirthDate";
                birthDayColumn.DataFormatString = "{0:d}";

                birthDayColumn.sortExpression = "BirthDate";
                _grid.Columns.Add(birthDayColumn);

                BoundField frenchOccupationColumn = new BoundField();
                frenchOccupationColumn.HeaderText = "frenchOccupation";
                frenchOccupationColumn.datafield = "frenchOccupation";
                frenchOccupationColumn.sortExpression = "frenchOccupation";
                _grid.Columns.Add(frenchOccupationColumn);

                BoundField HouSEOwnerFlagColumn = new BoundField();
                HouSEOwnerFlagColumn.HeaderText = "HouSEOwnerFlag";
                HouSEOwnerFlagColumn.datafield = "HouSEOwnerFlag";
                HouSEOwnerFlagColumn.sortExpression = "HouSEOwnerFlag";
                _grid.Columns.Add(HouSEOwnerFlagColumn);

                BoundField NumberCarsOwnedColumn = new BoundField();
                NumberCarsOwnedColumn.HeaderText = "NumberCarsOwned";
                NumberCarsOwnedColumn.datafield = "NumberCarsOwned";
                NumberCarsOwnedColumn.sortExpression = "NumberCarsOwned";
                _grid.Columns.Add(NumberCarsOwnedColumn);

                BoundField AddressLine1Column = new BoundField();
                AddressLine1Column.HeaderText = "AddressLine1";
                AddressLine1Column.datafield = "AddressLine1";
                AddressLine1Column.sortExpression = "AddressLine1";
                _grid.Columns.Add(AddressLine1Column);

                BoundField AddressLine2Column = new BoundField();
                AddressLine2Column.HeaderText = "AddressLine2";
                AddressLine2Column.datafield = "AddressLine2";
                AddressLine2Column.sortExpression = "AddressLine2";
                _grid.Columns.Add(AddressLine2Column);

                BoundField AddressLine3Column = new BoundField();
                AddressLine3Column.HeaderText = "AddressLine3";
                AddressLine3Column.datafield = "AddressLine3";
                AddressLine3Column.sortExpression = "AddressLine3";
                _grid.Columns.Add(AddressLine3Column);

                BoundField AddressLine4Column = new BoundField();
                AddressLine4Column.HeaderText = "AddressLine4";
                AddressLine4Column.datafield = "AddressLine4";
                AddressLine4Column.sortExpression = "AddressLine4";
                _grid.Columns.Add(AddressLine4Column);

                BoundField AddressLine5Column = new BoundField();
                AddressLine5Column.HeaderText = "AddressLine5";
                AddressLine5Column.datafield = "AddressLine5";
                AddressLine5Column.sortExpression = "AddressLine5";
                _grid.Columns.Add(AddressLine5Column);

                BoundField AddressLine6Column = new BoundField();
                AddressLine6Column.HeaderText = "AddressLine6";
                AddressLine6Column.datafield = "AddressLine6";
                AddressLine6Column.sortExpression = "AddressLine6";
                _grid.Columns.Add(AddressLine6Column);

                BoundField AddressLine7Column = new BoundField();
                AddressLine7Column.HeaderText = "AddressLine7";
                AddressLine7Column.datafield = "AddressLine7";
                AddressLine7Column.sortExpression = "AddressLine7";
                _grid.Columns.Add(AddressLine7Column);

                BoundField AddressLine8Column = new BoundField();
                AddressLine8Column.HeaderText = "AddressLine8";
                AddressLine8Column.datafield = "AddressLine8";
                AddressLine8Column.sortExpression = "AddressLine8";
                _grid.Columns.Add(AddressLine8Column);

                BoundField AddressLine9Column = new BoundField();
                AddressLine9Column.HeaderText = "AddressLine9";
                AddressLine9Column.datafield = "AddressLine9";
                AddressLine9Column.sortExpression = "AddressLine9";
                _grid.Columns.Add(AddressLine9Column);

                BoundField AddressLine10Column = new BoundField();
                AddressLine10Column.HeaderText = "AddressLine10";
                AddressLine10Column.datafield = "AddressLine10";
                AddressLine10Column.sortExpression = "AddressLine10";
                _grid.Columns.Add(AddressLine10Column);

                BoundField AddressLine11Column = new BoundField();
                AddressLine11Column.HeaderText = "AddressLine11";
                AddressLine11Column.datafield = "AddressLine11";
                AddressLine11Column.sortExpression = "AddressLine11";
                _grid.Columns.Add(AddressLine11Column);

                BoundField AddressLine12Column = new BoundField();
                AddressLine12Column.HeaderText = "AddressLine12";
                AddressLine12Column.datafield = "AddressLine12";
                AddressLine12Column.sortExpression = "AddressLine12";
                _grid.Columns.Add(AddressLine12Column);

                BoundField AddressLine13Column = new BoundField();
                AddressLine13Column.HeaderText = "AddressLine13";
                AddressLine13Column.datafield = "AddressLine13";
                AddressLine13Column.sortExpression = "AddressLine13";
                _grid.Columns.Add(AddressLine13Column);

                BoundField AddressLine14Column = new BoundField();
                AddressLine14Column.HeaderText = "AddressLine14";
                AddressLine14Column.datafield = "AddressLine14";
                AddressLine14Column.sortExpression = "AddressLine14";
                _grid.Columns.Add(AddressLine14Column);



            }

            private void LockColumns()
            {

                //_grid.Columns[0].HeaderStyle.CssClass = "FrozenHeader";
                //_grid.Columns[1].HeaderStyle.CssClass = "FrozenHeader";
                //_grid.Columns[2].HeaderStyle.CssClass = "FrozenHeader";
                //_grid.Columns[3].HeaderStyle.CssClass = "FrozenHeader";
                //_grid.Columns[4].HeaderStyle.CssClass = "FrozenHeader";

                //_grid.Columns[1].HeaderStyle.CssClass = "FrozenHeader";
                //_grid.Columns[1].HeaderStyle.CssClass = "FrozenCell";

                //_grid.HeaderRow.Cells[0].CssClass = "locked";

                //_grid.HeaderRow.Cells[1].CssClass = "locked";

                //_grid.HeaderRow.Cells[2].CssClass = "locked";

                foreach (GridViewRow row in _grid.Rows)
                {
                    //if (row.RowType == DataControlRowType.DaTarow)
                    //{

                    //row.Cells[0].CssClass = "FrozenCell";
                    //row.Cells[1].CssClass = "FrozenCell";
                    //row.Cells[2].CssClass = "FrozenCell";
                    //row.Cells[3].CssClass = "FrozenCell";
                    //row.Cells[4].CssClass = "FrozenCell";

                    //row.Cells[0].CssClass = "locked";
                    //row.Cells[0].CssClass = "locked";

                    //row.Cells[1].CssClass = "locked";

                    //row.Cells[2].CssClass = "locked";
                    //}
                }


            }


            public DataTable SelectData()
            {
                #region hardcoded data
                //DataTable dataSource = new DataTable();

                //dataSource.Columns.Add("ID");
                //dataSource.Columns.Add("Name");
                //dataSource.Columns.Add("Region");
                //dataSource.Columns.Add("Total Sales");

                //dataSource.Rows.Add(1,"J. Smith","Europe",10000);
                //dataSource.Rows.Add(2,"north America",15000);
                //dataSource.Rows.Add(3,"Asia",5000);
                //dataSource.Rows.Add(4,"S. Jones",7000);
                //dataSource.Rows.Add(5,30000);
                //dataSource.Rows.Add(6,8700);
                //dataSource.Rows.Add(7,"W. Nguyen",3000);
                //dataSource.Rows.Add(8,50000);
                //dataSource.Rows.Add(9,25000);
                //return dataSource;

                #endregion
                var dataGet = new DataTable();
                SPSecurity.RunWithElevatedPrivileges(delegate()
                                                         {
                                                             using (
                                                                 var conn =
                                                                     new sqlConnection(
                                                                         "Data Source=localhost;Initial Catalog=AdventureWorksDW2008R2;Integrated Security=True")
                                                                 )
                                                             {
                                                                 var adapter = new sqlDataAdapter();
                                                                 //adapter.SelectCommand =
                                                                 //    new sqlCommand("Select TOP 100 LastName,Birthdate,FirstName FROM DimCustomer WHere firstName like 'A%'");
                                                                 //adapter.SelectCommand =
                                                                 //    new sqlCommand("Select TOP 20 LastName,'FirstName_1' as FirstName FROM DimCustomer WHere firstName like 'A%' UNION ALL Select TOP 20 LastName,'FirstName_2' as FirstName FROM DimCustomer WHere firstName like 'B%'");
                                                                 adapter.SelectCommand =
                                                                     new sqlCommand("Select TOP 20 LastName,'FirstName_1' as FirstName,frenchOccupation,HouSEOwnerFlag,NumberCarsOwned,AddressLine1,AddressLine2,Phone,DateFirstPurchase,Commutedistance,'adressssss3' as AddressLine3,'adressssss4' as AddressLine4,'adressssss5' as AddressLine5,'adressssss6' as AddressLine6,'adressssss7' as AddressLine7,'adressssss8' as AddressLine8,'adressssss9' as AddressLine9,'adressssss10' as AddressLine10,'adressssss11' as AddressLine11,'adressssss12' as AddressLine12,'adressssss13' as AddressLine13,'adressssss14' as AddressLine14   FROM DimCustomer WHere firstName like 'A%' UNION ALL Select TOP 20 LastName,'FirstName_2' as FirstName,'adressssss14' as AddressLine14  FROM DimCustomer WHere firstName like 'B%'");
                                                                 adapter.SelectCommand.Connection = conn;
                                                                 conn.open();

                                                                 adapter.Fill(dataGet);

                                                             }
                                                         });

                dataGet.Columns["Birthdate"].DataType = System.Type.GetType("System.DateTime");

                return dataGet;


            }

            protected void GridView1_RowDataBound(object sender,GridViewRowEventArgs e)
            {
                if (e.Row.RowType == DataControlRowType.DaTarow)
                {
                    if (e.Row.Cells.Count > 1)
                    {

                        _grid.HeaderRow.Cells[0].CssClass = "locked";
                        e.Row.Cells[0].CssClass = "locked";
                    }
                }
            }
        }
    }

视图:

<%@ Assembly Name="$SharePoint.Project.AssemblyFullName$" %>
<%@ Assembly Name="Microsoft.Web.CommandUI,Version=14.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls"
    Assembly="Microsoft.SharePoint,PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint,PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="asp" Namespace="System.Web.UI" Assembly="System.Web.Extensions,Version=3.5.0.0,PublicKeyToken=31bf3856ad364e35" %>
<%@ Import Namespace="Microsoft.SharePoint" %>
<%@ Register TagPrefix="webpartpages" Namespace="Microsoft.SharePoint.webpartpages"
    Assembly="Microsoft.SharePoint,PublicKeyToken=71e9bce111e9429c" %>
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="VisualWebPart1UserControl.ascx.cs"
    Inherits="FirstSPGridView.VisualWebPart1.VisualWebPart1UserControl" %>
<%@ Register TagPrefix="MySPGridView" Namespace="MySPGridView" %>

我有输出

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

解决方法

您面临的问题(基于您链接的示例站点)是Web上的“工作版本”仅在Quirks模式下工作,但如果您在Master上强制执行,则您的SharePoint 2010页面甚至不会在Quirks模式下打开页.

如果你能够使用jQuery,你可以轻松地创建第一列的副本(如果你想要第一列),我会玩一些代码并稍后编辑它.

编辑w /解决方案:http://jsfiddle.net/q48dS/

EDIT2:在您的Visual Web部件上:

<div id="container">
<SharePoint:SPGridView runat="server" DataSource="<%# Items %>" ShowHeader="true"
    AutoGenerateColumns="False" ID="tbl" Visible="false">
    <Columns>
      <asp:BoundField datafield="Column0" HeaderText="Column0" />
      <asp:BoundField datafield="Column1" HeaderText="Column1" />
      <asp:BoundField datafield="Column2" HeaderText="Column2" />
      <asp:BoundField datafield="Column3" HeaderText="Column3" />
      <asp:BoundField datafield="Column4" HeaderText="Column4" />
      <asp:BoundField datafield="Column5" HeaderText="Column5" />
      <asp:BoundField datafield="Column6" HeaderText="Column6" />
      <asp:BoundField datafield="Column7" HeaderText="Column7" />
      <asp:BoundField datafield="Column8" HeaderText="Column8" />
      <asp:BoundField datafield="Column9" HeaderText="Column9" />
      <asp:BoundField datafield="Column10" HeaderText="Column10" />
      <asp:BoundField datafield="Column11" HeaderText="Column11" />
    </Columns>
  </SharePoint:SPGridView>
  </div>

代码背后:

protected object Items
{
  get
  {
    var dt = new DataTable("Itens");
    dt.Columns.Add("Column0");
    dt.Columns.Add("Column1");
    dt.Columns.Add("Column2");
    dt.Columns.Add("Column3");
    dt.Columns.Add("Column4");
    dt.Columns.Add("Column5");
    dt.Columns.Add("Column6");
    dt.Columns.Add("Column7");
    dt.Columns.Add("Column8");
    dt.Columns.Add("Column9");
    dt.Columns.Add("Column10");
    dt.Columns.Add("Column11");

    for (var i = 0; i < 30; i++)
      dt.Rows.Add("lorem ipsum dolor" + i,"sit amet" + i,"consequetur" + i,"elit" + i,"lorem ipsum dolor" + i,"consequetur" + i);

    return dt;

  }
}

protected void Page_Load(object sender,EventArgs e)
{
  DataBind();
}

ps.:别忘了使用<%= tbl.ClientID%>在javascript中获取实际ID

相关文章

Css3如何实现鼠标移上变长特效?(图文+视频)
css3怎么实现鼠标悬停图片时缓慢变大效果?(图文+视频)
jquery如何实现点击网页回到顶部效果?(图文+视频)
css3边框阴影效果怎么做?(图文+视频)
css怎么实现圆角边框和圆形效果?(图文+视频教程)
Css3如何实现旋转移动动画特效