- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 jqGrid 的初学者,我遇到了 2 个问题。
首先,我想在我的网格中实现一个搜索工具栏,如下图所示。
我进行了分析,发现使用下面的代码行可以启用搜索工具栏。但我尝试放置它,没有预期的输出。
jQuery("#overviewJqGrid").jqGrid('navGrid', '#jqGridPager',
{ edit: false, add: false, del: false, search: true }, {}, {}, {}, { closeAfterSearch: true });
JS代码:
app.controller('DiscoveryOverviewCtrl', function ($scope, $rootScope, $compile, localStorageService) {
var gwdth = $("#divGrid").width();
//TODO: Find a better solution
var WebApiServerUrl = $rootScope.WebApiURL;
$('#DiscoveryReportModel').on('show.bs.modal', function (event) {
var button = $(event.relatedTarget);
var reportId = button.data('id');
var machineName = button.data('machinename');
// If necessary, you could initiate an AJAX request here (and then do the updating in a callback).
// Update the modal's content. We'll use jQuery here, but you could use a data binding library or other methods instead.
var modal = $(this);
modal.find('#titleSpan').text('Machine Name / IP Address: ' + machineName)
$("#tblDiscoveryReport").jqGrid('setGridParam', { url: $rootScope.WebApiURL + "/discovery/" + reportId, datatype: "json" }).trigger("reloadGrid");
$("#tblDiscoveryReport").jqGrid({
url: $rootScope.WebApiURL + "/discovery/" + reportId,
datatype: "json",
contentType: 'application/json',
ajaxGridOptions: { contentType: 'application/json; charset=utf-8' },
serializeGridData: function (postData) { return JSON.stringify(postData); },
colNames: ['Attribute Name', 'Message', 'Attribute Value'],
colModel: [
{ name: 'attributeName', width: 130 },
{ name: 'message', width: 80 },
{ name: 'attributeValue', formatter: ReportItemStatusImage, width: 40, align: 'center' }
],
loadonce: true,
width: 550,
height: 200,
rowNum: 20,
rowList: [20, 30, 50],
sortname: 'Attribute Name',
viewrecords: true,
gridview: true,
sortable: true,
mtype: 'GET',
loadBeforeSend: function (xhr) {
var authData = localStorageService.get('authorizationData');
if (authData) {
xhr.setRequestHeader("Authorization", 'Bearer ' + authData.token);
}
return xhr;} });
function ReportItemStatusImage(cellvalue, options, rowObject) {
if (cellvalue == true) {
return "<img src='/assets/img/OK.png' height='16' width='16' />";
}
else {
return "<img src='/assets/img/NOK.png' height='16' width='16' />";
}
}
});
$scope.config = {
url: $rootScope.WebApiURL + '/discovery',
datatype: "json",
contentType: 'application/json',
ajaxGridOptions: { contentType: 'application/json; charset=utf-8' },
serializeGridData: function (postData) { return JSON.stringify(postData); },
width: gwdth,
height: 550,
colNames: ['ID', 'Discovery Title', 'Requested Date', 'Completed Date', 'Owner', 'Discovery Status', 'Discoverd Machines'],
colModel: [
{ name: 'id', key: true, width: 50, sorttype: 'int' },
{ name: 'discoveryTitle', width: 80 },
{ name: 'createdDateTime', width: 80, formatter: 'date', formatoptions: { srcformat: "ISO8601Long", newformat: "m/d/Y h:i:s A" } },
{ name: 'discoveryEndDate', width: 80, formatter: 'date', formatoptions: { srcformat: "ISO8601Long", newformat: "m/d/Y h:i:s A" } },
{ name: 'createdByUser', width: 80 },
{ name: 'discoveryRequestStatus', width: 80 },
{ name: 'discoverdMachinesCount', width: 80, sorttype: 'int' }
],
loadonce: true,
rowNum: 10,
rowList: [20, 30, 50],
sortname: 'id',
sortorder: "asc",
viewrecords: true,
gridview: true,
mtype: 'GET',
subGrid: true,
sortable: true,
pager: true,
viewrecords: true,
gridview: true,
mtype: 'GET',
subGridRowExpanded: function (subgrid_id, row_id) {
// we pass two parameters
// subgrid_id is a id of the div tag created within a table
// the row_id is the id of the row
// If we want to pass additional parameters to the url we can use
// the method getRowData(row_id) - which returns associative array in type name-value
// here we can easy construct the following
var subgrid_table_id;
subgrid_table_id = subgrid_id + "_t";
pager_id = "p_" + subgrid_table_id;
$("#" + subgrid_id).html("<table id='" + subgrid_table_id + "' class='scroll'></table><div id='" + pager_id + "'></div>");
$("#" + subgrid_table_id).jqGrid({
url: $rootScope.WebApiURL + '/discovery/' + row_id,
datatype: "json",
colNames: ["Id", 'Machine Name / IP Address', 'Status', 'Report'],
colModel: [
{ name: 'id', key: true, width: 50, sorttype: 'int' },
{ name: 'machineName', width: 200 },
{ name: 'isDiscovered', width: 80, edittype: 'image', formatter: isDiscoveredFormatter, align: "center", search: false },
{ name: 'id', label: 'report', formatter: reportFormatter, width: 75, fixed: true, align: 'center', search: false }
],
height: '100%',
loadonce:true,
rowNum: 10,
rowList: [20, 30, 50],
sortable: true,
sortname: 'num',
sortorder: "asc",
pager: pager_id,
loadBeforeSend: function (xhr) {
var authData = localStorageService.get('authorizationData');
if (authData) {
xhr.setRequestHeader("Authorization", 'Bearer ' + authData.token);
}
return xhr;
}
});
jQuery("#" + subgrid_table_id).jqGrid('navGrid', "#" + pager_id, { edit: false, add: false, del: false })
},
subGridOptions: {
// configure the icons from theme rolloer
plusicon: "ui-icon-triangle-1-e",
minusicon: "ui-icon-triangle-1-s",
openicon: "ui-icon-arrowreturn-1-e" },
loadBeforeSend: function (xhr) {
var authData = localStorageService.get('authorizationData');
if (authData) {
xhr.setRequestHeader("Authorization", 'Bearer ' + authData.token);
}
return xhr;
}};
var reportFormatter = function (id, cellp, rowData) {
var stateLink = "<button type=\"button\" class=\"btn btn-link\" data-toggle=\"modal\" data-target=\"#DiscoveryReportModel\" data-id=\"" + id + "\" data-machinename=\"" + rowData.machineName + "\">Report</button>";
return stateLink;
};
var isDiscoveredFormatter = function (cellvalue, options, rowObject) {
if (cellvalue == true)
return '<img src="\\assets\\img\\OK.png" height="16" width="16" />';
else
return '<img src="\\assets\\img\\NOK.png" height="16" width="16" />';
};
//Placed here
});
HTML 代码:
<div class="modal fade" id="DiscoveryReportModel" tabindex="-1" role="dialog" aria-labelledby="DiscoveryReportModelLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title">Discovery Report</h4>
</div>
<div class="modal-body">
<div class="well with-header with-footer">
<div class="header bordered-success">
<span id="titleSpan">Some title</span>
</div>
<div id="divReportGrid">
<table id="tblDiscoveryReport"></table>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
<div class="row" ng-controller="DiscoveryOverviewCtrl">
<div class="col-xs-12 col-md-12">
<div class="widget">
<div class="widget-header bordered-bottom bordered-themeprimary">
<i class="widget-icon fa fa-tasks themeprimary"></i>
<span class="widget-caption">Discovery Overview</span>
</div>
<div id="divGrid" class="widget-body">
<ng-jq-grid id="overviewJqGrid" config="config" api="api"></ng-jq-grid>
<div id="jqGridPager"></div><br/>
</div>
</div>
</div>
第二个问题是,其他页面上的搜索工具栏不适用于日期字段列。它确实适用于“包含”和“不包含”,因为“等于”和其他搜索操作会导致空白输出。
我尝试使用 this 中描述的 srcformats并通过 this 转介文档。
JS代码
$("#jQGridMonitoredMachines").jqGrid({
url: $rootScope.WebApiURL + '/getallmonitoredmachinerequests',
datatype: "json",
contentType: 'application/json',
ajaxGridOptions: { contentType: 'application/json; charset=utf-8' },
colNames: ['Id', 'Machine Name', 'IP Address', 'Discovered Date', 'Agent Install Status', 'Agent Installation Date', 'Agent Status', 'Agent Version', 'Last HeartBeat Received'],
colModel: [
{ name: 'id', hidden: false, width: 20, key: true, sorttype: 'int', search: true },
{ name: 'machineName', width: 120, search: true },
{ name: 'ipAddress', width: 60, search: true },
//{ name: 'discoveredDate', width: 110, formatter: 'date', formatoptions: { srcformat: 'y-m-d', newformat: 'l, F d, Y' } },
//, searchoptions: { sopt: ['eq','ne'], dataInit : function (elem) { $(elem).datepicker({ changeYear: true, changeMonth: true, showButtonPanel: true})} } },
{ name: 'discoveredDate', width: 110, search: true, formatter: 'date', formatoptions: { srcformat: "ISO8601Long", newformat: "m/d/Y h:i:s A" } },
{ name: 'agentInstallStatus', width: 100, search: true },
{ name: 'agentInstallationDate', width: 110, search:true, formatter: 'date', formatoptions: { srcformat: "ISO8601Long", newformat: "m/d/Y h:i:s A" } },
{ name: 'agentStatusName', width: 60, search: true },
{ name: 'agentVersion', width: 50, search: true },
{ name: 'lastHeartBeatRecieved', width: 110, search:true,formatter: 'date', formatoptions: { srcformat: "ISO8601Long", newformat: "m/d/Y h:i:s A" } }
],
rowattr: function (rd) {
if (rd.agentInstallStatus != 'Completed' && rd.agentInstallStatus != 'Upgrade Completed' && rd.agentInstallStatus != 'Uninstallation Failed') {
return {
"class": "ui-state-disabled ui-jqgrid-disablePointerEvents"
};
}
},
sortname: 'id',
sortorder: 'asc',
loadonce: true,
viewrecords: true,
gridview: true,
width: gwdth,
height: 650,
sortable:true,
rowNum: 30,
rowList: [10, 20, 30],
mtype: 'GET',
multiselect: true,
multipleSearch: true,
pager: "#jqGridPager",
为了使适当的功能正常工作,我还需要做些什么?
最佳答案
$("#overviewJqGrid").jqGrid('navGrid', '#jqGridPager', ...);
?您应该验证它将在之后创建网格以解决您的第一个问题。idPrefix
用于子网格数据以防止 id 重复(例如 idPrefix: "s_" + row_id + "_"
)。$('#DiscoveryReportModel').on('show.bs.modal', ...
可以调用更多一次,那么你应该包括 GridUnload
的调用而不是 setGridParam
.重要的是要了解 $("#overviewJqGrid").jqGrid({...})
将转换空 <table id="overviewJqGrid"></table>
相对复杂的div和表格结构。因此,有两个主要选项可以在下次调用时刷新数据:setGridParam
更改一些选项并触发 "reloadGrid"
或使用 GridUnload
销毁先前创建的网格然后使用 $("#overviewJqGrid").jqGrid({...})
在同一个地方创建新网格. setGridParam
的用法之前$("#overviewJqGrid").jqGrid({...})
不会一起工作。最后一个使用“等于”操作搜索日期的问题在我看来是完全独立的问题。您使用完整的日期时间作为输入数据并以“m/d/Y h:i:s A”格式显示。用户输入带时间的完整日期非常不舒服。输入数据中毫秒的存在可能会产生额外的问题。该解决方案可能在很大程度上取决于您的确切要求和您使用的 jqGrid 的分支。大约一年以来,我开发了免费的 jqGrid 分支。我实现了自定义排序操作,它允许您准确定义需要如何比较数据。例如,您可以使用 Date only "equal"
比较日期您只比较 date 部分而忽略时间部分。 The old demo ,这是我为 the old issue 创建的演示该功能。可以在演示中输入(或选择)“04/15/2015”,过滤后的数据将是包含“4/15/2015 9:15:40 PM”、“4/15/2015 3:31”的树状线条: 49 PM”和“4/15/2015 12:00:00 AM”:
最后,我想再引用一次 the old answer它演示了 jqGrid 关于 directive
的用法垂钓者。该示例可能对您也有帮助。
关于javascript - 应用 jqgrid 搜索过滤器工具栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34609054/
两者有什么区别? v7-21 工具栏中没有的所有功能都包含在工具栏中吗?使用 v7-21 工具栏代替工具栏有哪些限制? 最佳答案 如果您查看 Toolbar 的文档和 AppCompat Toolba
如何使用 jQuery 进行可拖动的 Tinymce 工具栏? 最佳答案 在你的 tinyMCE init 方法中试试这个 tinyMCE.init({ // ... handle_event_cal
是否可以有一个多行的 ExtJsToolBar?我想要第一行的几个控件和第二行的 3 个 ExtJsButtons。 工具栏是面板的顶部工具栏。 最佳答案 不确定早期版本,但从 ExtJS 4.0 开
环境: iOS 6/7、Xcode 5 中的自动布局。 我知道要调整 NavBar 以适应状态栏,我将 NavBar 的背景图像设置为 64 位高(引用:WWDC 2013 Video Lecture
有没有办法获取整个 OS X 中使用的默认 NSButton 来导航窗口的内容?我所说的按钮显示在 Finder、系统偏好设置、Safari、Mac App Store、游戏中心等中。 虽然我可以使用
我没有使用 Windows 上 gvim 中的菜单和工具栏;我可以隐藏它们吗? 这将为文本区域提供更多空间。 最佳答案 使用guioptions设置(缩写为go)。 :set guioptions -
我使用 jQuery 为tinymce 创建了一个外部 float 工具栏。 tinyMCE.init({ ... theme_advanced_toolbar_location :
使用我的 TitleAreaDialog 是否可以在按钮下方的底部添加一个区域或一个栏。当操作发生时,可以向用户显示一条消息。 这是我所指的例子 最佳答案 据我所知,这对于 JFace Dialog
我已经创建了 JToolBar (Java Swing)。我在包含 JToolBar 的框架上设置了背景图像。我希望我的 JToolBar 是透明的,以便保持在框架上的图像应该是可见的。我正在使用 s
如何检查键盘何时完全显示以及何时像这样折叠?也许我可以检查它的高度? 我暂时检查了 notification 中的 userInfo,但没有发现对解决我的问题有用。 最佳答案 只需订阅通知: Noti
我想使用 jQuery UI 创建一个带标题的工具栏。 到目前为止,我有: HTML: go to beginning Submit CSS: #toolbar
这是我的 list 文件: 这是我的 Activity 布局: 这是我
如何去掉 android View 顶部的白框?我在我的代码中看不到我调用创建工具栏的东西的任何地方,我也没有自己编写代码。它也存在于 View 之上,而不是其中。我猜 xml 文件的设计 View
有人知道怎么做吗? 最佳答案 使用带有 alignParentBottom="true"的 LinearLayout 像这样: 我没有尝试编译,您可能需要修正一些拼写错误,但这是一个
我想以编程方式更改 Android 工具栏中导航图标(屏幕截图中的黑色圆圈)的高度和宽度。有什么办法吗?这不是工具栏 Logo 。我无法在 Styles xml 中更新工具栏主题,因为我希望它是动态的
我目前正在开发一个实现 Appcompat 工具栏的应用程序。现在我的问题是,如果我选择一个 Light Actionbar 作为基础,菜单是白色的,标题是黑色的。我希望两者都是白色的。如果我更改为
是否可以在工具栏中同时显示主页图标和返回图标?1)是否可以更改后退按钮图标和主页图标的显示顺序。目前它首先显示箭头按钮,然后显示 Logo (主页按钮) 2) 第二个要求是在单击主页图标时清除 Act
我想要一个双倍高度的操作栏(如 Material 指南示例中所示),但标题中(可能)有 2 行文本。我使用的标题是动态的,取决于页面中显示的项目。如果只有一行,它应该看起来像一个普通的操作栏,如果有
目前正在努力调整我的工具栏的布局。 我有两个按钮。一个左对齐,另一个右对齐。文本(应用程序标题)需要位于两个按钮的中央。 例子:[按钮 1] [文本] [按钮 2] 我的问题。文本未居中对齐。 它需要
我有一个包含 CardView 的 RecyclerView。 我想为每个 CardView 添加一个工具栏,使其看起来和行为都像主工具栏: [图标] [标题] ......... [按钮] [按钮]
我是一名优秀的程序员,十分优秀!