【问题标题】:Fixed GridView Header with horizontal and vertical scrolling in asp.net修复了 GridView Header 在 asp.net 中的水平和垂直滚动
【发布时间】:2011-11-29 08:31:48
【问题描述】:

我想在垂直滚动时修复(冻结)gridview 标题。

我还想在水平滚动时修复第一列。

我想在 chrome 和 IE 中都使用这个。

【问题讨论】:

    标签: asp.net gridview


    【解决方案1】:

    使用 java 脚本实现...

    将下面给出的javascript代码复制并粘贴到head标签内。

    <script language="javascript" type="text/javascript">
             function MakeStaticHeader(gridId, height, width, headerHeight, isFooter) {
             var tbl = document.getElementById(gridId);
             if (tbl) {
             var DivHR = document.getElementById('DivHeaderRow');
             var DivMC = document.getElementById('DivMainContent');
             var DivFR = document.getElementById('DivFooterRow');
            
             //*** Set divheaderRow Properties ****
             DivHR.style.height = headerHeight + 'px';
             DivHR.style.width = (parseInt(width) - 16) + 'px';
             DivHR.style.position = 'relative';
             DivHR.style.top = '0px';
             DivHR.style.zIndex = '10';
             DivHR.style.verticalAlign = 'top';
            
             //*** Set divMainContent Properties ****
             DivMC.style.width = width + 'px';
             DivMC.style.height = height + 'px';
             DivMC.style.position = 'relative';
             DivMC.style.top = -headerHeight + 'px';
             DivMC.style.zIndex = '1';
            
             //*** Set divFooterRow Properties ****
             DivFR.style.width = (parseInt(width) - 16) + 'px';
             DivFR.style.position = 'relative';
             DivFR.style.top = -headerHeight + 'px';
             DivFR.style.verticalAlign = 'top';
             DivFR.style.paddingtop = '2px';
            
             if (isFooter) {
             var tblfr = tbl.cloneNode(true);
             tblfr.removeChild(tblfr.getElementsByTagName('tbody')[0]);
             var tblBody = document.createElement('tbody');
             tblfr.style.width = '100%';
             tblfr.cellSpacing = "0";
             tblfr.border = "0px";
              tblfr.rules = "none";
             //*****In the case of Footer Row *******
             tblBody.appendChild(tbl.rows[tbl.rows.length - 1]);
             tblfr.appendChild(tblBody);
             DivFR.appendChild(tblfr);
             }
             //****
             DivHR.appendChild(tbl.cloneNode(true));
             }
            }
            
            
            
            function OnScrollDiv(Scrollablediv) {
              document.getElementById('DivHeaderRow').scrollLeft = Scrollablediv.scrollLeft;
            document.getElementById('DivFooterRow').scrollLeft = Scrollablediv.scrollLeft;
            }
            
        </script>
    

    然后复制此代码并粘贴并将您的网格视图放置在 DivMainContent 中。

    HTML 代码:-

        <div id="DivRoot" align="left">
        
           <div style="overflow: hidden;" id="DivHeaderRow">
           </div>
            
           <div style="overflow:scroll;" onscroll="OnScrollDiv(this)" id="DivMainContent">
                   
           <%--  ***Place Your GridView Here***
           <asp:GridView  runat="server"  ID="gridshow" Width="100%" 
           AutoGenerateColumns="False"ShowFooter="True">
              <Columns>
                 //...................
              </Columns>
           </asp:GridView>
           --%>
                  
           </div>
            
              <div id="DivFooterRow" style="overflow:hidden">
              </div>
        </div>
    

    然后在绑定Gridview的时候调用Aspx.CS文件中的MakeStaticHeader函数,传递一些参数。

    1. Gridview 的ClientId(将GrdDisplay.ClientID 更改为您的gridview 客户端ID)。
    2. 可滚动 div 的高度。
    3. 可滚动 div 的宽度。
    4. 表格标题行的高度。
    5. IsFooter (true/false) 是否要使页脚静态化。

    -->绑定Gridview后,放下面代码

        ScriptManager.RegisterStartupScript(Page, this.GetType(), "Key", "<script>MakeStaticHeader('" + GrdDisplay.ClientID + "', 400, 950 , 40 ,true); </script>", false);
    

    希望这肯定会奏效......

    【讨论】:

      【解决方案2】:

      参考这里是 100% 工作

      https://stackoverflow.com/a/59357398/11863405

      Gridview 控件的静态标题

      【讨论】:

      • 如果您将“AllowSorting”之类的设置设置为 true,或者您已将其他回发功能添加到标题中,这似乎不起作用。例如,如果您启用了排序,然后单击标题列进行排序,整个网格视图就会消失。
      【解决方案3】:
      <script type="text/javascript">
              $(document).ready(function () {
                  var gridHeader = $('#<%=grdSiteWiseEmpAttendance.ClientID%>').clone(true); // Here Clone Copy of Gridview with style
                  $(gridHeader).find("tr:gt(0)").remove(); // Here remove all rows except first row (header row)
                  $('#<%=grdSiteWiseEmpAttendance.ClientID%> tr th').each(function (i) {
                      // Here Set Width of each th from gridview to new table(clone table) th 
                      $("th:nth-child(" + (i + 1) + ")", gridHeader).css('width', ($(this).width()).toString() + "px");
                  });
                  $("#GHead1").append(gridHeader);
                  $('#GHead1').css('position', 'top');
                  $('#GHead1').css('top', $('#<%=grdSiteWiseEmpAttendance.ClientID%>').offset().top);
      
              });
          </script>
      
      <div class="row">
                                                              <div class="col-lg-12" style="width: auto;">
                                                                  <div id="GHead1"></div>
                                                                  <div id="divGridViewScroll1" style="height: 600px; overflow: auto">
                                                                      <div class="table-responsive">
                                                                          <asp:GridView ID="grdSiteWiseEmpAttendance" CssClass="table table-small-font table-bordered table-striped" Font-Size="Smaller" EmptyDataRowStyle-ForeColor="#cc0000" HeaderStyle-Font-Size="8" HeaderStyle-Font-Names="Calibri" HeaderStyle-Font-Italic="true" runat="server" AutoGenerateColumns="false"
                                                                              BackColor="#f0f5f5" OnRowDataBound="grdSiteWiseEmpAttendance_RowDataBound" HeaderStyle-ForeColor="#990000">
      
                                                                              <Columns>
                                                                              </Columns>
                                                                              <HeaderStyle HorizontalAlign="Justify" VerticalAlign="Top" />
                                                                              <RowStyle Font-Names="Calibri" ForeColor="#000000" />
                                                                          </asp:GridView>
                                                                      </div>
                                                                  </div>
                                                              </div>
                                                          </div>
      

      【讨论】:

      • 如果您将“AllowSorting”之类的设置设置为 true,或者您已将其他回发功能添加到标题中,这似乎不起作用。例如,如果您启用了排序,然后单击标题列进行排序,则整个网格视图就会消失。很想知道该问题的解决方案,因为您的解决方案非常简单明了。
      【解决方案4】:
      // create this Js and add reference
      
      var GridViewScrollOptions = /** @class */ (function () {
          function GridViewScrollOptions() {
          }
          return GridViewScrollOptions;
      }());
      
      var GridViewScroll = /** @class */ (function ()
       {
      
          function GridViewScroll(options) {
              this._initialized = false;
              if (options.elementID == null)
                  options.elementID = "";
              if (options.width == null)
                  options.width = "700";
              if (options.height == null)
                  options.height = "350";
              if (options.freezeColumnCssClass == null)
                  options.freezeColumnCssClass = "";
              if (options.freezeFooterCssClass == null)
                  options.freezeFooterCssClass = "";
              if (options.freezeHeaderRowCount == null)
                  options.freezeHeaderRowCount = 1;
              if (options.freezeColumnCount == null)
                  options.freezeColumnCount = 1;
              this.initializeOptions(options);
          }
          GridViewScroll.prototype.initializeOptions = function (options) {
              this.GridID = options.elementID;
              this.GridWidth = options.width;
              this.GridHeight = options.height;
              this.FreezeColumn = options.freezeColumn;
              this.FreezeFooter = options.freezeFooter;
              this.FreezeColumnCssClass = options.freezeColumnCssClass;
              this.FreezeFooterCssClass = options.freezeFooterCssClass;
              this.FreezeHeaderRowCount = options.freezeHeaderRowCount;
              this.FreezeColumnCount = options.freezeColumnCount;
          };
      
          GridViewScroll.prototype.enhance = function () 
      {
      
              this.FreezeCellWidths = [];
              this.IsVerticalScrollbarEnabled = false;
              this.IsHorizontalScrollbarEnabled = false;
              if (this.GridID == null || this.GridID == "")
       {
      
                  return;
              }
      
              this.ContentGrid = document.getElementById(this.GridID);
              if (this.ContentGrid == null) {
      
                  return;
              }
              if (this.ContentGrid.rows.length < 2) {
      
      
                  return;
              }
              if (this._initialized) {
      
                  this.undo();
              }
      
              this._initialized = true;
              this.Parent = this.ContentGrid.parentNode;
              this.ContentGrid.style.display = "none";
              if (typeof this.GridWidth == 'string' && this.GridWidth.indexOf("%") > -1) {
                  var percentage = parseInt(this.GridWidth);
                  this.Width = this.Parent.offsetWidth * percentage / 100;
              }
              else {
      
                  this.Width = parseInt(this.GridWidth);
              }
              if (typeof this.GridHeight == 'string' && this.GridHeight.indexOf("%") > -1) {
      
      
                  var percentage = parseInt(this.GridHeight);
                  this.Height = this.Parent.offsetHeight * percentage / 100;
              }
              else {
      
                  this.Height = parseInt(this.GridHeight);
              }
      
              this.ContentGrid.style.display = "";
              this.ContentGridHeaderRows = this.getGridHeaderRows();
              this.ContentGridItemRow = this.ContentGrid.rows.item(this.FreezeHeaderRowCount);
              var footerIndex = this.ContentGrid.rows.length - 1;
              this.ContentGridFooterRow = this.ContentGrid.rows.item(footerIndex);
              this.Content = document.createElement('div');
              this.Content.id = this.GridID + "_Content";
              this.Content.style.position = "relative";
              this.Content = this.Parent.insertBefore(this.Content, this.ContentGrid);
              this.ContentFixed = document.createElement('div');
              this.ContentFixed.id = this.GridID + "_Content_Fixed";
              this.ContentFixed.style.overflow = "auto";
              this.ContentFixed = this.Content.appendChild(this.ContentFixed);
              this.ContentGrid = this.ContentFixed.appendChild(this.ContentGrid);
              this.ContentFixed.style.width = String(this.Width) + "px";
              if (this.ContentGrid.offsetWidth > this.Width) {
      
                  this.IsHorizontalScrollbarEnabled = true;
              }
      
              if (this.ContentGrid.offsetHeight > this.Height) {
      
                  this.IsVerticalScrollbarEnabled = true;
              }
      
              this.Header = document.createElement('div');
              this.Header.id = this.GridID + "_Header";
              this.Header.style.backgroundColor = "#F0F0F0";
              this.Header.style.position = "relative";
              this.HeaderFixed = document.createElement('div');
              this.HeaderFixed.id = this.GridID + "_Header_Fixed";
              this.HeaderFixed.style.overflow = "hidden";
              this.Header = this.Parent.insertBefore(this.Header, this.Content);
              this.HeaderFixed = this.Header.appendChild(this.HeaderFixed);
              this.ScrollbarWidth = this.getScrollbarWidth();
              this.prepareHeader();
              this.calculateHeader();
              this.Header.style.width = String(this.Width) + "px";
              if (this.IsVerticalScrollbarEnabled) {
      
                  this.HeaderFixed.style.width = String(this.Width - this.ScrollbarWidth) + "px";
                  if (this.IsHorizontalScrollbarEnabled) {
      
                      this.ContentFixed.style.width = this.HeaderFixed.style.width;
                      if (this.isRTL()) {
      
                          this.ContentFixed.style.paddingLeft = String(this.ScrollbarWidth) + "px";
                      }
      
                      else {
      
                          this.ContentFixed.style.paddingRight = String(this.ScrollbarWidth) + "px";
                      }
      
                  }
      
                  this.ContentFixed.style.height = String(this.Height - this.Header.offsetHeight) + "px";
              }
      
              else {
      
                  this.HeaderFixed.style.width = this.Header.style.width;
                  this.ContentFixed.style.width = this.Header.style.width;
              }
      
              if (this.FreezeColumn && this.IsHorizontalScrollbarEnabled) {
      
                  this.appendFreezeHeader();
                  this.appendFreezeContent();
              }
              if (this.FreezeFooter && this.IsVerticalScrollbarEnabled) {
      
                  this.appendFreezeFooter();
                  if (this.FreezeColumn && this.IsHorizontalScrollbarEnabled) {
      
      
                      this.appendFreezeFooterColumn();
                  }
              }
              var self = this;
              this.ContentFixed.onscroll = function (event) {
      
                  self.HeaderFixed.scrollLeft = self.ContentFixed.scrollLeft;
                  if (self.ContentFreeze != null)
                      self.ContentFreeze.scrollTop = self.ContentFixed.scrollTop;
                  if (self.FooterFreeze != null)
                      self.FooterFreeze.scrollLeft = self.ContentFixed.scrollLeft;
              };
          };
          GridViewScroll.prototype.getGridHeaderRows = function () {
      
      
      
              var gridHeaderRows = new Array();
              for (var i = 0; i < this.FreezeHeaderRowCount; i++) {
      
                  gridHeaderRows.push(this.ContentGrid.rows.item(i));
      
              }
              return gridHeaderRows;
          };
          GridViewScroll.prototype.prepareHeader = function () {
      
              this.HeaderGrid = this.ContentGrid.cloneNode(false);
              this.HeaderGrid.id = this.GridID + "_Header_Fixed_Grid";
              this.HeaderGrid = this.HeaderFixed.appendChild(this.HeaderGrid);
              this.prepareHeaderGridRows();
              for (var i = 0; i < this.ContentGridItemRow.cells.length; i++) {
      
                  this.appendHelperElement(this.ContentGridItemRow.cells.item(i));
                  this.appendHelperElement(this.HeaderGridHeaderCells[i]);
              }
          };
          GridViewScroll.prototype.prepareHeaderGridRows = function () {
      
              this.HeaderGridHeaderRows = new Array();
              for (var i = 0; i < this.FreezeHeaderRowCount; i++) {
                  var gridHeaderRow = this.ContentGridHeaderRows[i];
                  var headerGridHeaderRow = gridHeaderRow.cloneNode(true);
                  this.HeaderGridHeaderRows.push(headerGridHeaderRow);
                  this.HeaderGrid.appendChild(headerGridHeaderRow);
              }
      
              this.prepareHeaderGridCells();
          };
          GridViewScroll.prototype.prepareHeaderGridCells = function () {
      
              this.HeaderGridHeaderCells = new Array();
              for (var i = 0; i < this.ContentGridItemRow.cells.length; i++) {
      
                  for (var rowIndex in this.HeaderGridHeaderRows) {
      
      
                      var cgridHeaderRow = this.HeaderGridHeaderRows[rowIndex];
                      var fixedCellIndex = 0;
                      for (var cellIndex = 0; cellIndex < cgridHeaderRow.cells.length; cellIndex++) {
                          var cgridHeaderCell = cgridHeaderRow.cells.item(cellIndex);
                          if (cgridHeaderCell.colSpan == 1 && i == fixedCellIndex) {
      
                              this.HeaderGridHeaderCells.push(cgridHeaderCell);
                          }
                          else {
                              fixedCellIndex += cgridHeaderCell.colSpan - 1;
                          }
                          fixedCellIndex++;
                      }
                  }
              }
          };
          GridViewScroll.prototype.calculateHeader = function () {
      
              for (var i = 0; i < this.ContentGridItemRow.cells.length; i++) {
      
                  var gridItemCell = this.ContentGridItemRow.cells.item(i);
                  var helperElement = gridItemCell.firstChild;
                  var helperWidth = parseInt(String(helperElement.offsetWidth));
                  this.FreezeCellWidths.push(helperWidth);
                  helperElement.style.width = helperWidth + "px";
                  helperElement = this.HeaderGridHeaderCells[i].firstChild;
                  helperElement.style.width = helperWidth + "px";
              }
              for (var i = 0; i < this.FreezeHeaderRowCount; i++) {
      
                  this.ContentGridHeaderRows[i].style.display = "none";
              }
          };
          GridViewScroll.prototype.appendFreezeHeader = function () {
      
              this.HeaderFreeze = document.createElement('div');
              this.HeaderFreeze.id = this.GridID + "_Header_Freeze";
              this.HeaderFreeze.style.position = "absolute";
              this.HeaderFreeze.style.overflow = "hidden";
              this.HeaderFreeze.style.top = "0px";
              this.HeaderFreeze.style.left = "0px";
              this.HeaderFreeze.style.width = "";
              this.HeaderFreezeGrid = this.HeaderGrid.cloneNode(false);
              this.HeaderFreezeGrid.id = this.GridID + "_Header_Freeze_Grid";
              this.HeaderFreezeGrid = this.HeaderFreeze.appendChild(this.HeaderFreezeGrid);
              this.HeaderFreezeGridHeaderRows = new Array();
              for (var i = 0; i < this.HeaderGridHeaderRows.length; i++) {
      
                  var headerFreezeGridHeaderRow = this.HeaderGridHeaderRows[i].cloneNode(false);
                  this.HeaderFreezeGridHeaderRows.push(headerFreezeGridHeaderRow);
                  var columnIndex = 0;
                  var columnCount = 0;
                  while (columnCount < this.FreezeColumnCount) {
      
                      var freezeColumn = this.HeaderGridHeaderRows[i].cells.item(columnIndex).cloneNode(true);
                      headerFreezeGridHeaderRow.appendChild(freezeColumn);
                      columnCount += freezeColumn.colSpan;
                      columnIndex++;
                  }
                  this.HeaderFreezeGrid.appendChild(headerFreezeGridHeaderRow);
              }
              this.HeaderFreeze = this.Header.appendChild(this.HeaderFreeze);
          };
          GridViewScroll.prototype.appendFreezeContent = function () {
      
              this.ContentFreeze = document.createElement('div');
              this.ContentFreeze.id = this.GridID + "_Content_Freeze";
              this.ContentFreeze.style.position = "absolute";
              this.ContentFreeze.style.overflow = "hidden";
              this.ContentFreeze.style.top = "0px";
              this.ContentFreeze.style.left = "0px";
              this.ContentFreeze.style.width = "";
              this.ContentFreezeGrid = this.HeaderGrid.cloneNode(false);
              this.ContentFreezeGrid.id = this.GridID + "_Content_Freeze_Grid";
              this.ContentFreezeGrid = this.ContentFreeze.appendChild(this.ContentFreezeGrid);
              var freezeCellHeights = [];
              var paddingTop = this.getPaddingTop(this.ContentGridItemRow.cells.item(0));
              var paddingBottom = this.getPaddingBottom(this.ContentGridItemRow.cells.item(0));
              for (var i = 0; i < this.ContentGrid.rows.length; i++) {
      
                  var gridItemRow = this.ContentGrid.rows.item(i);
                  var gridItemCell = gridItemRow.cells.item(0);
                  var helperElement = void 0;
                  if (gridItemCell.firstChild.className == "gridViewScrollHelper") {
      
                      helperElement = gridItemCell.firstChild;
                  }
                  else {
                      helperElement = this.appendHelperElement(gridItemCell);
                  }
                  var helperHeight = parseInt(String(gridItemCell.offsetHeight - paddingTop - paddingBottom));
                  freezeCellHeights.push(helperHeight);
                  var cgridItemRow = gridItemRow.cloneNode(false);
                  var cgridItemCell = gridItemCell.cloneNode(true);
                  if (this.FreezeColumnCssClass != null || this.FreezeColumnCssClass != "")
                      cgridItemRow.className = this.FreezeColumnCssClass;
                  var columnIndex = 0;
                  var columnCount = 0;
                  while (columnCount < this.FreezeColumnCount) {
      
                      var freezeColumn = gridItemRow.cells.item(columnIndex).cloneNode(true);
                      cgridItemRow.appendChild(freezeColumn);
                      columnCount += freezeColumn.colSpan;
                      columnIndex++;
                  }
                  this.ContentFreezeGrid.appendChild(cgridItemRow);
              }
              for (var i = 0; i < this.ContentGrid.rows.length; i++) {
      
                  var gridItemRow = this.ContentGrid.rows.item(i);
                  var gridItemCell = gridItemRow.cells.item(0);
                  var cgridItemRow = this.ContentFreezeGrid.rows.item(i);
                  var cgridItemCell = cgridItemRow.cells.item(0);
                  var helperElement = gridItemCell.firstChild;
                  helperElement.style.height = String(freezeCellHeights[i]) + "px";
                  helperElement = cgridItemCell.firstChild;
                  helperElement.style.height = String(freezeCellHeights[i]) + "px";
              }
              if (this.IsVerticalScrollbarEnabled) {
                  this.ContentFreeze.style.height = String(this.Height - this.Header.offsetHeight - this.ScrollbarWidth) + "px";
              }
              else {
                  this.ContentFreeze.style.height = String(this.ContentFixed.offsetHeight - this.ScrollbarWidth) + "px";
              }
              this.ContentFreeze = this.Content.appendChild(this.ContentFreeze);
          };
          GridViewScroll.prototype.appendFreezeFooter = function () {
      
              this.FooterFreeze = document.createElement('div');
              this.FooterFreeze.id = this.GridID + "_Footer_Freeze";
              this.FooterFreeze.style.position = "absolute";
              this.FooterFreeze.style.overflow = "hidden";
              this.FooterFreeze.style.left = "0px";
              this.FooterFreeze.style.width = String(this.ContentFixed.offsetWidth - this.ScrollbarWidth) + "px";
              this.FooterFreezeGrid = this.HeaderGrid.cloneNode(false);
              this.FooterFreezeGrid.id = this.GridID + "_Footer_Freeze_Grid";
              this.FooterFreezeGrid = this.FooterFreeze.appendChild(this.FooterFreezeGrid);
              this.FooterFreezeGridHeaderRow = this.ContentGridFooterRow.cloneNode(true);
              if (this.FreezeFooterCssClass != null || this.FreezeFooterCssClass != "")
                  this.FooterFreezeGridHeaderRow.className = this.FreezeFooterCssClass;
              for (var i = 0; i < this.FooterFreezeGridHeaderRow.cells.length; i++) {
      
                  var cgridHeaderCell = this.FooterFreezeGridHeaderRow.cells.item(i);
                  var helperElement = this.appendHelperElement(cgridHeaderCell);
                  helperElement.style.width = String(this.FreezeCellWidths[i]) + "px";
              }
              this.FooterFreezeGridHeaderRow = this.FooterFreezeGrid.appendChild(this.FooterFreezeGridHeaderRow);
              this.FooterFreeze = this.Content.appendChild(this.FooterFreeze);
              var footerFreezeTop = this.ContentFixed.offsetHeight - this.FooterFreeze.offsetHeight;
              if (this.IsHorizontalScrollbarEnabled) {
      
                  footerFreezeTop -= this.ScrollbarWidth;
              }
              this.FooterFreeze.style.top = String(footerFreezeTop) + "px";
          };
          GridViewScroll.prototype.appendFreezeFooterColumn = function () {
      
              this.FooterFreezeColumn = document.createElement('div');
              this.FooterFreezeColumn.id = this.GridID + "_Footer_FreezeColumn";
              this.FooterFreezeColumn.style.position = "absolute";
              this.FooterFreezeColumn.style.overflow = "hidden";
              this.FooterFreezeColumn.style.left = "0px";
              this.FooterFreezeColumn.style.width = "";
              this.FooterFreezeColumnGrid = this.HeaderGrid.cloneNode(false);
              this.FooterFreezeColumnGrid.id = this.GridID + "_Footer_FreezeColumn_Grid";
              this.FooterFreezeColumnGrid = this.FooterFreezeColumn.appendChild(this.FooterFreezeColumnGrid);
              this.FooterFreezeColumnGridHeaderRow = this.FooterFreezeGridHeaderRow.cloneNode(false);
              this.FooterFreezeColumnGridHeaderRow = this.FooterFreezeColumnGrid.appendChild(this.FooterFreezeColumnGridHeaderRow);
              if (this.FreezeFooterCssClass != null)
                  this.FooterFreezeColumnGridHeaderRow.className = this.FreezeFooterCssClass;
              var columnIndex = 0;
              var columnCount = 0;
              while (columnCount < this.FreezeColumnCount) {
      
                  var freezeColumn = this.FooterFreezeGridHeaderRow.cells.item(columnIndex).cloneNode(true);
                  this.FooterFreezeColumnGridHeaderRow.appendChild(freezeColumn);
                  columnCount += freezeColumn.colSpan;
                  columnIndex++;
              }
              var footerFreezeTop = this.ContentFixed.offsetHeight - this.FooterFreeze.offsetHeight;
              if (this.IsHorizontalScrollbarEnabled) {
      
                  footerFreezeTop -= this.ScrollbarWidth;
              }
              this.FooterFreezeColumn.style.top = String(footerFreezeTop) + "px";
              this.FooterFreezeColumn = this.Content.appendChild(this.FooterFreezeColumn);
          };
          GridViewScroll.prototype.appendHelperElement = function (gridItemCell) {
      
              var helperElement = document.createElement('div');
              helperElement.className = "gridViewScrollHelper";
              while (gridItemCell.hasChildNodes()) {
      
                  helperElement.appendChild(gridItemCell.firstChild);
              }
              return gridItemCell.appendChild(helperElement);
          };
          GridViewScroll.prototype.getScrollbarWidth = function () {
      
              var innerElement = document.createElement('p');
              innerElement.style.width = "100%";
              innerElement.style.height = "200px";
              var outerElement = document.createElement('div');
              outerElement.style.position = "absolute";
              outerElement.style.top = "0px";
              outerElement.style.left = "0px";
              outerElement.style.visibility = "hidden";
              outerElement.style.width = "200px";
              outerElement.style.height = "150px";
              outerElement.style.overflow = "hidden";
              outerElement.appendChild(innerElement);
              document.body.appendChild(outerElement);
              var innerElementWidth = innerElement.offsetWidth;
              outerElement.style.overflow = 'scroll';
              var outerElementWidth = innerElement.offsetWidth;
              if (innerElementWidth === outerElementWidth)
                  outerElementWidth = outerElement.clientWidth;
              document.body.removeChild(outerElement);
              return innerElementWidth - outerElementWidth;
          };
          GridViewScroll.prototype.isRTL = function () {
      
              var direction = "";
              if (window.getComputedStyle) {
      
                  direction = window.getComputedStyle(this.ContentGrid, null).getPropertyValue('direction');
              }
              else {
                  direction = this.ContentGrid.currentStyle.direction;
              }
              return direction === "rtl";
          };
          GridViewScroll.prototype.getPaddingTop = function (element) {
      
              var value = "";
              if (window.getComputedStyle) {
      
                  value = window.getComputedStyle(element, null).getPropertyValue('padding-Top');
              }
              else {
      
                  value = element.currentStyle.paddingTop;
              }
              return parseInt(value);
          };
          GridViewScroll.prototype.getPaddingBottom = function (element) {
              var value = "";
      
              if (window.getComputedStyle) {
      
                  value = window.getComputedStyle(element, null).getPropertyValue('padding-Bottom');
              }
              else {
      
                  value = element.currentStyle.paddingBottom;
              }
              return parseInt(value);
          };
          GridViewScroll.prototype.undo = function () {
      
              this.undoHelperElement();
              for (var _i = 0, _a = this.ContentGridHeaderRows; _i < _a.length; _i++) {
                  var contentGridHeaderRow = _a[_i];
                  contentGridHeaderRow.style.display = "";
              }
              this.Parent.insertBefore(this.ContentGrid, this.Header);
              this.Parent.removeChild(this.Header);
              this.Parent.removeChild(this.Content);
              this._initialized = false;
          };
          GridViewScroll.prototype.undoHelperElement = function () {
      
              for (var i = 0; i < this.ContentGridItemRow.cells.length; i++) {
      
                  var gridItemCell = this.ContentGridItemRow.cells.item(i);
                  var helperElement = gridItemCell.firstChild;
                  while (helperElement.hasChildNodes()) {
      
                      gridItemCell.appendChild(helperElement.firstChild);
                  }
                  gridItemCell.removeChild(helperElement);
              }
              if (this.FreezeColumn) {
      
                  for (var i = 2; i < this.ContentGrid.rows.length; i++) {
      
                      var gridItemRow = this.ContentGrid.rows.item(i);
                      var gridItemCell = gridItemRow.cells.item(0);
                      var helperElement = gridItemCell.firstChild;
                      while (helperElement.hasChildNodes()) {
      
      
                          gridItemCell.appendChild(helperElement.firstChild);
                      }
                      gridItemCell.removeChild(helperElement);
                  }
              }
          };
          return GridViewScroll;
      }());
      
      //add On Head
      
      <head runat="server">
          <title></title>
      
          <script src="client/js/jquery-3.1.1.min.js"></script>
      
          <script src="js/gridviewscroll.js"></script>
      
          <script type="text/javascript">
              window.onload = function () {
      
                  var gridViewScroll = new GridViewScroll({
                      elementID: "GridView1" // [Header is fix column will be Freeze ][1]Target Control
                  });
                  gridViewScroll.enhance();
              }
          </script>
      
      </head>
      
      //Add on Body
      
      <body>
          <form id="form1" runat="server">
      
              <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="true">
      
             // <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
      
                 <%-- <Columns>
                      <asp:BoundField DataField="SHIPMENT_ID" HeaderText="SHIPMENT_ID"
                          ReadOnly="True" SortExpression="SHIPMENT_ID" />
                      <asp:BoundField DataField="TypeValue" HeaderText="TypeValue"
                          SortExpression="TypeValue" />
                      <asp:BoundField DataField="CHAId" HeaderText="CHAId"
                          SortExpression="CHAId" />
                      <asp:BoundField DataField="Status" HeaderText="Status"
                          SortExpression="Status" />
                  </Columns>--%>
              </asp:GridView>
      

      【讨论】:

        【解决方案5】:

        可以通过自定义 CSS 规则应用特定的 GridView / Table 布局(正如在<table><tbody> scrollable? 线程中讨论的那样)来修复 GridView 的 Header。但是,这种方法不适用于所有浏览器。 The 3-rd ASP.NET GridView controls (such as the ASPxGridView from DevExpress component vendor 提供此功能。

        还要检查以下 CodeProject 解决方案:

        【讨论】:

        • 这些解决方案都没有按预期工作。它们都依赖于固定宽度的列,或者将标题与表格的其余部分分开,或者使用在任何其他浏览器上都不起作用的 IE 特定的 top:expression(...)。顺便提一句。 CodeProject 中的文章默认应该被认为是错误的。到目前为止,我的经验是,如果您仅在 codeproject 上找到一篇文章,而在其他任何地方都没有 - 这是错误或不好的做法。
        【解决方案6】:

        我长期以来一直在寻找解决方案,发现大多数答案都不起作用或不适合我的情况与水平滚动以及标题和行的组合不匹配。

        最后我找到了一个使用 javascript 的解决方案,链接如下:-

        scrollable horizontal and vertical grid view with fixed headers

        【讨论】:

        • 如果您将“AllowSorting”之类的设置设置为 true,或者您已将其他回发功能添加到标题中,这似乎不起作用。例如,如果您启用了排序,然后单击标题列进行排序,整个网格视图就会消失。
        【解决方案7】:

        你可以试试overflowcss 属性。

        【讨论】:

          猜你喜欢
          • 2013-02-05
          • 1970-01-01
          • 2014-01-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-08-17
          相关资源
          最近更新 更多