如何冻结GridView的表头[GridView和列宽没有固定]

8
我正在实现带有垂直滚动条的Gridview冻结标题。我尝试了很多在这里建议的解决方案,但问题是:
  1. Gridview在面板中,其宽度不固定,为97%。

2. 列宽度不固定。

我尝试了GridviewScroll.js中建议的解决方案,但问题在于宽度固定,Gridview不会根据窗口大小调整大小。

我尝试了很多解决方案,但没有一个在没有固定宽度的情况下可以正常工作,因此我无法在此处展示。

以下是我的现有代码:

         <asp:Panel ID="panel_gridholder" runat="server"  style="position:absolute;left:10px;width:97%; min-width:1020px;margin-top:3px;margin-bottom:20px;overflow:auto;" >


            <asp:GridView ID="GridView_Vehicle" runat="server" AutoGenerateColumns="False" AllowSorting="true" PagerSettings-Position="TopAndBottom"
                OnPageIndexChanging="GridView_Vehicle_PageIndexChanging" OnSorting="GridView_Vehicle_Sorting" PageSize="100"
                GridLines="None" AllowPaging="true" CssClass="mGrid" PagerStyle-CssClass="pgr" AlternatingRowStyle-CssClass="alt">
                <Columns> </Columns>
           </asp:GridView>

            <div style="height: 400px"></div>
        </asp:Panel>

有什么建议吗?
2个回答

0

这里有一个适用于行数适中的网格的解决方案(如果您的行数超过了这个范围,您可能需要使用较小的分页而不是滚动):

创建两个具有相同规格和数据源的GridView元素,除了第二个元素具有ShowHeader =“false”之外。将第一个放在一个带有style =“height:38px; overflow:hidden”的div中(您可能需要根据标题所使用的字体调整高度)。将第二个放在一个带有style =“max-height:400px; overflow:auto”的div中(根据要显示的行数调整高度)。由于两个表格使用相同的数据,它们应该对齐,并且第二个表格将可以滚动。如果要启用排序,请在服务器上对共享数据源进行操作,并将第二个GridView放在具有AsyncPostBackTrigger指向第一个GridView的UpdatePanel中。以下是示例代码:

  <asp:Panel ID="panel_gridholder" runat="server"  style="position:absolute;left:10px;width:97%; min-width:1020px;margin-top:3px;margin-bottom:20px;" >
     <div style="height:38px; overflow:hidden">
        <asp:GridView ID="GridView_Vehicle_Header" runat="server" AutoGenerateColumns="False" ShowHeaderWhenEmpty="true" AllowSorting="true" OnSorting="GridView_Vehicle_Sorting" GridLines="None" CssClass="mGrid" AlternatingRowStyle-CssClass="alt">
            <Columns> </Columns>
       </asp:GridView>
    </div>
    <div style="max-height:400px; overflow:auto">
       <asp:UpdatePanel ID="UpdatePanel" runat="server" UpdateMode="Conditional">
          <ContentTemplate>
             <asp:GridView ID="GridView_Vehicle" runat="server" AutoGenerateColumns="False" ShowHeader="false" AllowSorting="true" OnSorting="GridView_Vehicle_Sorting" GridLines="None" CssClass="mGrid" AlternatingRowStyle-CssClass="alt">
                <Columns> </Columns>
             </asp:GridView>
          </ContentTemplate>
          <Triggers>
             <asp:AsyncPostBackTrigger ControlID="GridView_Vehicle_Header" />
          </Triggers>
       </asp:UpdatePanel>
    </div>
 </asp:Panel>

0

我会使用DataTables。除了满足您的要求(就我所理解的),它还是成熟、稳定且功能强大的。

我创建了一个JsFiddle来演示:https://jsfiddle.net/objo18f9/3/

在这个Fiddle中:标题固定,内容垂直滚动;没有指定列大小(当您拖动Fiddle的中间分隔符时,它们将自动调整大小);表格被一个设置为页面宽度的

包围(从记忆中得知,在ASP.Net中呈现为面板);并且启用了分页。

以下是相同示例的代码片段:

$(document).ready(function() {
  $('#example').DataTable({
    "scrollY": "200px",
    "scrollCollapse": true,
    "paging": true
  });
});
<script type="text/javascript" src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script type="text/javascript" src="https://cdn.datatables.net/1.10.13/js/jquery.dataTables.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.13/css/jquery.dataTables.min.css">

<div width="97%">
  <table id="example" class="display" width="100%" cellspacing="0">
    <thead>
      <tr>
        <th>Name</th>
        <th>Position</th>
        <th>Office</th>
        <th>Age</th>
        <th>Start date</th>
        <th>Salary</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>Tiger Nixon</td>
        <td>System Architect</td>
        <td>Edinburgh</td>
        <td>61</td>
        <td>2011/04/25</td>
        <td>$320,800</td>
      </tr>
      <tr>
        <td>Garrett Winters</td>
        <td>Accountant</td>
        <td>Tokyo</td>
        <td>63</td>
        <td>2011/07/25</td>
        <td>$170,750</td>
      </tr>
      <tr>
        <td>Ashton Cox</td>
        <td>Junior Technical Author</td>
        <td>San Francisco</td>
        <td>66</td>
        <td>2009/01/12</td>
        <td>$86,000</td>
      </tr>
      <tr>
        <td>Cedric Kelly</td>
        <td>Senior Javascript Developer</td>
        <td>Edinburgh</td>
        <td>22</td>
        <td>2012/03/29</td>
        <td>$433,060</td>
      </tr>
      <tr>
        <td>Airi Satou</td>
        <td>Accountant</td>
        <td>Tokyo</td>
        <td>33</td>
        <td>2008/11/28</td>
        <td>$162,700</td>
      </tr>
      <tr>
        <td>Brielle Williamson</td>
        <td>Integration Specialist</td>
        <td>New York</td>
        <td>61</td>
        <td>2012/12/02</td>
        <td>$372,000</td>
      </tr>
      <tr>
        <td>Herrod Chandler</td>
        <td>Sales Assistant</td>
        <td>San Francisco</td>
        <td>59</td>
        <td>2012/08/06</td>
        <td>$137,500</td>
      </tr>
      <tr>
        <td>Rhona Davidson</td>
        <td>Integration Specialist</td>
        <td>Tokyo</td>
        <td>55</td>
        <td>2010/10/14</td>
        <td>$327,900</td>
      </tr>
      <tr>
        <td>Colleen Hurst</td>
        <td>Javascript Developer</td>
        <td>San Francisco</td>
        <td>39</td>
        <td>2009/09/15</td>
        <td>$205,500</td>
      </tr>
      <tr>
        <td>Sonya Frost</td>
        <td>Software Engineer</td>
        <td>Edinburgh</td>
        <td>23</td>
        <td>2008/12/13</td>
        <td>$103,600</td>
      </tr>
      <tr>
        <td>Jena Gaines</td>
        <td>Office Manager</td>
        <td>London</td>
        <td>30</td>
        <td>2008/12/19</td>
        <td>$90,560</td>
      </tr>
      <tr>
        <td>Quinn Flynn</td>
        <td>Support Lead</td>
        <td>Edinburgh</td>
        <td>22</td>
        <td>2013/03/03</td>
        <td>$342,000</td>
      </tr>
      <tr>
        <td>Charde Marshall</td>
        <td>Regional Director</td>
        <td>San Francisco</td>
        <td>36</td>
        <td>2008/10/16</td>
        <td>$470,600</td>
      </tr>
      <tr>
        <td>Haley Kennedy</td>
        <td>Senior Marketing Designer</td>
        <td>London</td>
        <td>43</td>
        <td>2012/12/18</td>
        <td>$313,500</td>
      </tr>
      <tr>
        <td>Tatyana Fitzpatrick</td>
        <td>Regional Director</td>
        <td>London</td>
        <td>19</td>
        <td>2010/03/17</td>
        <td>$385,750</td>
      </tr>
      <tr>
        <td>Michael Silva</td>
        <td>Marketing Designer</td>
        <td>London</td>
        <td>66</td>
        <td>2012/11/27</td>
        <td>$198,500</td>
      </tr>
      <tr>
        <td>Paul Byrd</td>
        <td>Chief Financial Officer (CFO)</td>
        <td>New York</td>
        <td>64</td>
        <td>2010/06/09</td>
        <td>$725,000</td>
      </tr>
      <tr>
        <td>Gloria Little</td>
        <td>Systems Administrator</td>
        <td>New York</td>
        <td>59</td>
        <td>2009/04/10</td>
        <td>$237,500</td>
      </tr>
      <tr>
        <td>Bradley Greer</td>
        <td>Software Engineer</td>
        <td>London</td>
        <td>41</td>
        <td>2012/10/13</td>
        <td>$132,000</td>
      </tr>
      <tr>
        <td>Dai Rios</td>
        <td>Personnel Lead</td>
        <td>Edinburgh</td>
        <td>35</td>
        <td>2012/09/26</td>
        <td>$217,500</td>
      </tr>
    </tbody>
  </table>
</div>

如果您告诉ASP.Net使用静态ID:<asp:GridView ID="GridView_Vehicle" ClientIDMode="static" ...,那么您应该能够将表格称为:$('#GridView_Vehicle').DataTable({ ... });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接