提问人:SoundWaves 提问时间:10/27/2023 更新时间:11/1/2023 访问量:35
DataTables - 如何从 JSON 响应或其他 DataTables 参数修改无结果消息 (zeroRecords)
DataTables - How to Modify Message for No results (zeroRecords) from JSON response or another DataTables parameter
问:
对于上下文: 我有一个使用 DataTable 的应用程序,它使用默认的搜索功能并且运行良好。但是,还有其他筛选器和权限限制来定义页面上显示的内容。我收到用户投诉说,当他们找不到现有项目时,他们想知道原因。
话虽如此,当发现零结果时,我可以轻松地创建自定义消息。但是,我不知道如何将其传递回 DataTable,以便可以显示它。
下面共享的代码使用处理程序来获取数据。在此示例中,我将自定义消息添加为字段并将其隐藏在屏幕上。但是,这显然不起作用,因为当没有记录时,没有记录显示:)。
这是我的处理程序和 ASPX 页面的代码。它更多的是参考,因为我知道这个策略是行不通的。
任何想法将不胜感激!
Public Sub ProcessRequest(context As HttpContext) Implements IHttpHandler.ProcessRequest
Dim displayLength As Integer = Integer.Parse(context.Request("iDisplayLength"))
Dim displayStart As Integer = Integer.Parse(context.Request("iDisplayStart"))
Dim sortCol As Integer = Integer.Parse(context.Request("iSortCol_0"))
Dim sortDir As String = context.Request("sSortDir_0")
Dim search As String = context.Request("sSearch")
Dim Name As String = context.Server.HtmlEncode(context.Request.Cookies("User_Profile")("User_Name"))
Dim User_Name As String = FindName(Name)
Dim User_Id As String = FindId(Name)
Dim Area As String = context.Server.HtmlEncode(context.Request.Cookies("User_Profile")("Default_Area"))
Dim Dept As String = ""
Dim Status As String = ""
Dim ViewMyWOs As String = "All"
Try
ViewMyWOs = context.Server.HtmlEncode(context.Request.Cookies("WOInfo")("SaveMyWO"))
Catch ex As Exception
End Try
Try
If Not context.Request.Cookies("userInfo") Is Nothing Then
Dept = _
context.Server.HtmlEncode(context.Request.Cookies("userInfo")("SaveDeptQuery"))
Status = _
context.Server.HtmlEncode(context.Request.Cookies("userInfo")("SaveStatusQuery"))
End If
Catch ex As Exception
End Try
Dim spName As String = "spGetWORKORDER"
Dim cs As String = ConfigurationManager.ConnectionStrings("WorkOrdersConString").ConnectionString
Dim listWOs As New List(Of WorkOrder)()
Dim filteredCount As Integer = 0
Using con As New SqlConnection(cs)
Dim cmd As New SqlCommand(spName, con)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.AddWithValue("@DisplayLength", displayLength)
cmd.Parameters.AddWithValue("@DisplayStart", displayStart)
cmd.Parameters.AddWithValue("@SortCol", sortCol)
cmd.Parameters.AddWithValue("@SortDir", sortDir)
cmd.Parameters.AddWithValue("@Search", If(String.IsNullOrEmpty(search), Nothing, search))
cmd.Parameters.AddWithValue("@Area", Area)
cmd.Parameters.AddWithValue("@Dept", If((Dept = "All Departments"), Nothing, Dept))
cmd.Parameters.AddWithValue("@Status", Status)
cmd.Parameters.AddWithValue("@User_Name", User_Name)
cmd.Parameters.AddWithValue("@User_Id", User_Id)
cmd.Parameters.AddWithValue("@ViewMyWOs", ViewMyWOs)
con.Open()
Dim rdr As SqlDataReader = cmd.ExecuteReader()
While rdr.Read()
Dim workOrder As New WorkOrder()
workOrder.WO_Id = Convert.ToInt32(rdr("WO_Id"))
workOrder.Priority = rdr("Priority").ToString()
workOrder.Date_Submitted = Convert.ToDateTime(rdr("Date_Submitted")).ToShortDateString
workOrder.Submitted_By = rdr("Submitted_By").ToString()
workOrder.Task = rdr("Task").ToString()
workOrder.Material = rdr("Material").ToString()
workOrder.ChargeNumber = rdr("ChargeNumber").ToString()
workOrder.Summary = rdr("Summary").ToString()
workOrder.Part_Number = rdr("Part_Number").ToString()
workOrder.QTY = rdr("QTY").ToString()
workOrder.Department = rdr("Department").ToString()
workOrder.Machine = rdr("Machine").ToString()
workOrder.Full_Name = rdr("Full_Name").ToString()
workOrder.Status = rdr("Status").ToString()
workOrder.Requested_Completion = Convert.ToDateTime(rdr("Requested_Completion")).ToShortDateString
workOrder.Completion_Date = rdr("Completion_Date").ToString()
If workOrder.Completion_Date <> "" Then
workOrder.Completion_Date = Convert.ToDateTime(workOrder.Completion_Date).ToShortDateString
End If
workOrder.Late = DateTime.Compare(Convert.ToDateTime(workOrder.Requested_Completion), DateTime.Now.AddDays(-1))
filteredCount = Convert.ToInt32(rdr("TotalCount"))
Dim message As String = "No matching records found"
If filteredCount = 0 Then
'Modify message based on the reason for no results
message = "I like to Party"
End If
workOrder.Message = message
listWOs.Add(workOrder)
End While
End Using
Dim result = New With { _
Key .iTotalRecords = GetTotalCount(), _
Key .iTotalDisplayRecords = filteredCount, _
Key .aaData = listWOs _
}
Dim js As New JavaScriptSerializer()
context.Response.Write(js.Serialize(result))
End Sub
和 ASPX 页面
$(document).ready(function () {
var table = $('#npwoList').dataTable({
dom: 'Bfrtip',
columns: [
{ 'data': 'WO_Id' },
{ 'data': 'Priority' },
{ 'data': 'Date_Submitted' },
{ 'data': 'Submitted_By' },
{ 'data': 'Task' },
{ 'data': 'Material' },
{ 'data': 'ChargeNumber' },
{ 'data': 'Summary' },
{ 'data': 'Part_Number' },
{ 'data': 'QTY' },
{ 'data': 'Department' },
{ 'data': 'Machine' },
{ 'data': 'Full_Name' },
{ 'data': 'Status' },
{ 'data': 'Requested_Completion' },
{ 'data': 'Completion_Date' },
{ 'data': 'Late' },
{ 'data': 'Message' }
],
columnDefs:
[
{ //these columns are always visible
"targets": [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],
"visible": true,
"orderable": true,
"sortable": true,
"searchable": true,
},
{ //these columns are always invisible
"targets": [16,17],
"visible": false,
"orderable": false,
"sortable": false,
"searchable": false
}
],
bServerSide: true,
sAjaxSource: 'Handlers/WODataHandler.ashx',
deferRender: true,
lengthMenu: [
[25, 50, 100, 1000],
['25 rows', '50 rows', '100 rows', 'Show all']
],
buttons: ['pageLength',
{
extend: 'colvis',
collectionLayout: 'fixed two-column',
postfixButtons: ['colvisRestore']
}
],
language: {
buttons: {
colvis: 'Hide/Show Columns'
},
zeroRecords: **Add Message Here!!**//$('#npwoList tbody tr:eq(2) td:eq(17)').text()
},
"scrolly": 400,
"stateSave": true,
"order": [[0, "desc"]],
"stateSaveParams": function (settings, data) {
data.start = 0;
},
fnRowCallback: function (row, data, displayIndex) {
var api = this.api();
if ($(api.cell(displayIndex, 13).node()).text() == 'In-Process' &&
$(api.cell(displayIndex, 16).node()).text() > 0) {
$(row).addClass('green');
}
if ($(api.cell(displayIndex, 13).node()).text() != 'Complete' &&
$(api.cell(displayIndex, 13).node()).text() == 'Waiting - Engineering' &&
$(api.cell(displayIndex, 16).node()).text() >= 0){
$(row).addClass('blue');
}
if ($(api.cell(displayIndex, 13).node()).text() != 'Complete' &&
$(api.cell(displayIndex, 16).node()).text() < 0) {
$(row).addClass('red');
}
if ($(api.cell(displayIndex, 13).node()).text() != 'Complete' &&
$(api.cell(displayIndex, 13).node()).text() != 'In-Process' &&
$(api.cell(displayIndex, 16).node()).text() > 0) {
$(row).addClass('black');
}
if ($(api.cell(displayIndex, 13).node()).text() != 'Complete' &&
$(api.cell(displayIndex, 13).node()).text() == 'Monitor') {
$(row).addClass('blue');
}
}
});
$('#npwoList tbody').on('click', 'tr', function () {
var id = $('td', this).eq(0).text();
document.getElementById('<%=txtWorkOrderId.ClientID%>').value = id;
var clickButton = document.getElementById("<%= btnOpenNPWO.ClientID%>");
clickButton.click();
});
});
答:
0赞
SoundWaves
11/1/2023
#1
好的,这里的解决方案非常简单。
步骤 1 - 向 JSON 响应添加一个参数,无论检索到的记录数量如何,该参数都将返回一个值。在这种情况下,我添加了imessage。
Dim result = New With {
Key .iTotalRecords = GetTotalCount(),
Key .iTotalDisplayRecords = filteredCount,
Key .imessage = message,
Key .aaData = listWOs
}
要在客户端使用它,您需要将“zeroRecords”变量更改为函数。
language: {
zeroRecords: function () {
return function () {
return $('#npwoList').DataTable().ajax.json().imessage;
};
}
},
评论