数据表 - 添加单个列选择过滤会删除固定列

Posted

技术标签:

【中文标题】数据表 - 添加单个列选择过滤会删除固定列【英文标题】:Datatables - adding individual column select filtering removes fixed columns 【发布时间】:2018-12-16 14:21:44 【问题描述】:

我有一个 html 表格,我需要冻结标题,冻结 2 个左列,并显示过滤所有其他列(不是 2 个左列)的选项。当我自己做固定列时,它工作得很好。但是当我添加代码以包括列的下拉过滤时,固定列选项不起作用。知道如何解决这个问题吗?代码如下:

<script>
        $(document).ready(function () 
            $('#primary').DataTable(
                initComplete: function () 
                    this.api().columns([2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]).every(function () 
                        var column = this;
                        var select = $('<select><option value="">Show All</option></select>')
                            .appendTo($(column.header()))
                            .on('change', function () 
                                var val = $.fn.dataTable.util.escapeRegex(
                                    $(this).val()
                                );

                                column
                                    .search(val ? '^' + val + '$' : '', true, false)
                                    .draw();
                            );
                        column.data().unique().sort().each(function (d, j) 
                            var val = $('<div/>').html(d).text();
                            select.append('<option value="' + val + '">' + val + '</option>');
                        );
                    );
                ,
                paging: false,
                sort: false,
                scrollY: 500,
                scrollX: true,
                select: true,
                fixedColumns: 
                    leftColumns: 2
                ,
                fixedHeader: 
                    header: true,
                ,

            );
        );
    </script>

html表格:

<table id="1" class="table table-striped">
    @if (Model.1Function != null)
    
        <thead>
            <tr>
                @foreach (DataColumn column in (Model.1Function as DataTable).Columns)
                
                    <th>@column.ColumnName.ToUpper()</th>//header row
                
            </tr>
        </thead>
        <tbody>
            @if ((Model.1Function as DataTable).Rows.Count > 0)
            
                foreach (DataRow dr in (Model.1Function as DataTable).Rows)
                
                    <tr>
                        @foreach (DataColumn column in (Model.1Function as DataTable).Columns)
                        
                            <td style="max-width:200px; white-space:normal">
                                @dr[column].ToString()
                            </td>//write one row at a time.
                        
                    </tr>
                
            
            else
            
                var count = (Model.1Function as DataTable).Columns.Count;
                <tr>
                    <td colspan='@count' style="color:red;">
                        No Data Found.
                    </td>
                </tr>
            
        </tbody>

    
    else
    
        <tr>
            <td style="color:red;">
                @(Model.1Function .HasErrors != false ? Model.1Function .HasErrors.ToString() : "")
            </td>
        </tr>
    
</table>

解决这个问题的任何帮助都会很棒。提前致谢。

【问题讨论】:

【参考方案1】:

我不小心在 this.api().column 数组中添加了一个额外的列。这就是它失败的原因。一旦解决了这个问题。

【讨论】:

以上是关于数据表 - 添加单个列选择过滤会删除固定列的主要内容,如果未能解决你的问题,请参考以下文章

MySQL根据列删除重复数据

带有选择标签的 dataTables 列过滤插件

使用jQuery数据表中的列过滤器下拉列表修复标头

没有列过滤器的 primefaces 全局过滤器

无法过滤数据表中的单个列

如何通过Excel中的某个前缀过滤列数据