【问题标题】:How to freeze the header of the girdview [gridview and column width are not fixed]如何冻结gridview的header【gridview和列宽不固定】
【发布时间】:2017-08-14 19:05:55
【问题描述】:

我正在使用垂直滚动条实现 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>

有什么建议吗?

【问题讨论】:

    标签: gridview webforms vertical-scrolling fixed-header-tables


    【解决方案1】:

    这是一个具有中等行数的网格的解决方案(如果您有更多行,您可能希望使用较小尺寸的分页而不是滚动):

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

      <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>
    

    【讨论】:

      【解决方案2】:

      我会使用DataTables。除了做你想做的事(据我了解你的要求),它是成熟、稳定的,而且还有更多的能力。

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

      在小提琴中:标题通过内容的垂直滚动固定;没有指定的列大小(当您向左或向右拖动中间分隔符(小提琴的)时,它们会调整大小;并且表格被设置为页面宽度的 97% 的div 包围(从内存中是什么)像在 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:&lt;asp:GridView ID="GridView_Vehicle" ClientIDMode="static" ...,那么您应该能够将您的表称为:$('#GridView_Vehicle').DataTable({ ... });

      【讨论】:

        猜你喜欢
        • 2013-06-01
        • 2010-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多