【问题标题】:Bootstrap table sorting, filtering, pagination using dataTable.js使用 dataTable.js 引导表排序、过滤、分页
【发布时间】:2017-01-26 18:09:40
【问题描述】:

我正在研究 asp.net MVC-5 并创建了一个 Bootstrap 表来显示数据 现在我想应用分页、过滤和排序,为此我搜索了可能的文章并找到了this link,此链接中的技术非常简单,与我在项目中所做的相同。下面我已经包含了我的 .js.css 文件

<link href="~/Content/bootstrap.css" rel="stylesheet" />
<link href="~/Content/bootstrap.min.css" rel="stylesheet" />
<script src="~/Scripts/jquery-3.1.0.js"></script>
<link href="~/Content/jquery.dataTables.min.css" rel="stylesheet" />
<script type="text/javascript" src="~/Scripts/jquery.dataTables.min.js"></script>
<script type="text/javascript" src="~/Scripts/bootstrap.min.js"></script>
<script src="~/Scripts/bootstrap-toggle.js"></script>
<link href="~/Content/bootstrap-toggle.css" rel="stylesheet" />

<link rel="shortcut icon" href="favicon.ico" type="image/x-icon" />
<link rel="icon" href="favicon.ico" type="image/ico" />
<link rel="shortcut icon" href="~/favicon.ico" />

下面是我的表格语法

<table id="myTable" class="table table-bordered table-responsive table-hover">
    <tr>
        <th style="color:#006bff; font-family:'Segoe UI', Tahoma, Geneva, Verdana, sans-serif" >
            Name
        </th>
        <th style="color:#006bff; font-family:'Segoe UI', Tahoma, Geneva, Verdana, sans-serif">
            Ocurrence Time
        </th>
        <th style="color:#006bff; font-family:'Segoe UI', Tahoma, Geneva, Verdana, sans-serif">
            Recover Time
        </th>
    </tr>
    <tbody>
        @{
        if (ViewData["events"] != null)
        {
        if (ViewData.Values != null && ViewData.Values.Count() > 0)
        {
        foreach (System.Data.DataRow dr in (ViewData["events"] as System.Data.DataTable).Rows)
        {
        <tr>
            <td style="border:1px solid black; color:green;font-family:'Segoe UI', Tahoma, Geneva, Verdana, sans-serif">
                <span style="font-size:12px;">@dr[0]</span>
            </td>
            <td style="border:1px solid black; color:green;font-family:'Segoe UI', Tahoma, Geneva, Verdana, sans-serif">
                <span style="font-size:12px;">@(string.Format("{0:dd MMMM yyyy hh:mm tt}", dr[1]))</span>
            </td>
            <td style="border:1px solid black; color:green;font-family:'Segoe UI', Tahoma, Geneva, Verdana, sans-serif">
                <span style="font-size:12px;"> @(string.Format("{0:dd MMMM yyyy hh:mm tt}", dr[2]))</span>
            </td>
        </tr>
        }
        }
        }
        }
    </tbody>
</table>

最后我已经放置了我的脚本

<script type="text/javascript">
$(document).ready(function () {
    $('#myTable').dataTable();
});

下面是控制器代码

//Getting Events from Database
//string query = "SELECT Distinct DE.Occurrence_Time,DE.Recovery_Time FROM Device_Events DE INNER JOIN ADS_Device_Data AD ON AD.Device_ID=DE.Device_ID WHERE 1=1 ";
string query = "SELECT Distinct  e.Event_Name, de.Occurrence_Time, de.Recovery_Time from Device_Events DE inner join Events e on de.Event_ID = e.Event_ID inner join ADS_Device_Data ad on de.Device_ID = ad.Device_ID where 1=1 ";

if (search != "") {
    query += " AND ad.Device_Serial_Number= '" + search + "'";
}

if (time.ToString() != " ") {
    query += " AND de.Occurrence_Time >= '" + time.ToString() + "'";
}


SqlCommand event_command = new SqlCommand(query, con);

//SqlCommand event_command = new SqlCommand("Select Device_Event_ID,Device_ID,Event_ID,Occurrence_Time,Recovery_Time from [Device_Events] where Device_ID=@device_id", con);
//event_command.Parameters.AddWithValue("@device_id", device_id);

con.Open();
SqlDataReader reader_events = event_command.ExecuteReader();

while (reader_events.Read()) {
    //events.Add(Convert.ToString(reader_events["Event_Name"]));
    //events.Add(Convert.ToString(reader_events["Occurrence_Time"]));
    //events.Add(Convert.ToString(reader_events["Recovery_Time"]));
    events.Rows.Add(Convert.ToString(reader_events["Event_Name"]),
        Convert.ToString(reader_events["Occurrence_Time"]),
        Convert.ToString(reader_events["Recovery_Time"]));



    //events.Add(string.Concat(Convert.ToString(reader_events["Event_Name"]) + " - " +" Occur " + Convert.ToString(reader_events["Occurrence_Time"]) + " - " + " Recover " + Convert.ToString(reader_events["Recovery_Time"]).Replace("\n", Environment.NewLine)));

    //events.Add(string.Concat(" Power Failure " + " Event ID # " + Convert.ToString(reader_events["Event_ID"]) + " Device ID # " + Convert.ToString(reader_events["Device_ID"]) + " Occur at " + Convert.ToString(reader_events["Occurrence_Time"]) + " Recover at " + Convert.ToString(reader_events["Recovery_Time"]).Replace("\n", Environment.NewLine)));
    //events.Add(string.Concat(" Power Failure " + " Event ID # " + Convert.ToString(reader_events["Event_ID"]) + ", Device ID # " + Convert.ToString(reader_events["Device_ID"]) + ", Occured " + Convert.ToString(reader_events["Occurrence_Time"]) + ", Recover " + Convert.ToString(reader_events["Recovery_Time"]).ToList().ToPagedList(page ?? 1, 5)));
}
con.Close();

之后我将事件放在 viewdata ViewData["events"] = events;

做完这一切后,我得到了下面的结果

没有启用分页、排序和过滤

我一定是错过了什么

我们将不胜感激任何帮助

【问题讨论】:

  • 你的 Datatable 插件是什么版本的?此外,如果您使用version &gt; 1.10,请使用$('#myTable').DataTable(); 而不是$('#myTable').dataTable();
  • 另外,尝试明确地启用几列的排序,看看它是否有效,尝试类似$('#myTable').DataTable({order: [[ 3, 'desc' ], [ 0, 'asc' ]]} );
  • @parkash: 我已经从这个链接下载了datatables.net/download 我也改变了 .dataTable();到数据表();什么都没有发生
  • @faisal,请按照@Mannam 在表定义中的说明添加标题。如果它不能解决问题,请创建您的代码的JSFiddle
  • @all: 我收到这个错误 $(...).DataTable is not a function

标签: javascript jquery css twitter-bootstrap asp.net-mvc-5


【解决方案1】:

在表格中使用头>标签

<thead>
    <tr>
        <th style="color:#006bff; font-family:'Segoe UI', Tahoma, Geneva, Verdana, sans-serif" >
            Name
        </th>
        <th style="color:#006bff; font-family:'Segoe UI', Tahoma, Geneva, Verdana, sans-serif">
            Ocurrence Time
        </th>
        <th style="color:#006bff; font-family:'Segoe UI', Tahoma, Geneva, Verdana, sans-serif">
            Recover Time
        </th>
    </tr>
</thead>

【讨论】:

  • 我收到此错误 $(...).DataTable 不是函数
  • 你放了thead标签了吗?
  • @faisal 请检查,两次引用 jQuery 时也会出现此问题
  • @Div: jQuery 只是按时添加
  • @faisal 创建 JSFiddle
【解决方案2】:

我知道这是一个旧线程,但对我有用的解决方案并未在此处列出,而且它仍然出现在 Google 搜索结果的顶部。尝试将 defer 添加到您的 datatable.js 导入中

<script defer type="text/javascript" src="~/Scripts/jquery.dataTables.min.js"></script>

如果您打开开发者工具(在 chrome 中)并点击“网络”,您可以看到文件加载的顺序。即使 Jquery.js 在您的 html 文件中出现在 DataTables.js 之前,Jquery 可能还没有在 DataTables 完成加载时完成。添加 defer 确保最后加载 datatables.js 文件。

此外,如果您想知道是否以某种方式加载了两个 jquery 实例(此问题的另一个可能原因),您可以在“网络”下的开发人员工具中看到。

【讨论】:

  • 这个问题已经有一段时间了。在 datatables js 之前导入 jquery 但没有工作。添加defer 修复它!谢谢
猜你喜欢
  • 1970-01-01
  • 2018-01-13
  • 1970-01-01
  • 1970-01-01
  • 2018-06-22
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 2013-11-08
相关资源
最近更新 更多