У меня есть простой пользовательский элемент управления, который использует jqGrid. управление такое же, как в следующем коде:
Разметка:
<div id="grid_container" runat="server">
<table id="umlt_grid" runat="server"></table>
<div id="umlt_grid_pager" runat="server"></div>
</div>
<div id="umlt_dialog" title="Umlt" style="display: none;" runat="server"></div>
Скрипт (внутри файла ascx)
<script type="text/javascript" language="javascript">
$(document).ready(function () {
//Initialize controls
var dialogID = $('#<%=umlt_dialog.ClientID %>');
var dlg = $(dialogID);
dlg.dialog({ autoOpen: false, modal: true, stack: true, resizable: false, position: 'center', width: 380, height: 260 });
//Load the Grid
var gridID = '#<%=umlt_grid.ClientID %>';
var pagerID = '#<%=umlt_grid_pager.ClientID %>';
var containerID = '#<%=grid_container.ClientID %>'
var gridWidth = GetAvailableSpaceBody( $(containerID).width() );
loadUmltGrid(gridID, pagerID, dlg, gridWidth);
});
</script>
Функция loadUmltGrid
определена в специальном файле js, который загружается через главную страницу. Вот:
function loadUmltGrid(gridID, pagerID, dialog, gridWidth) {
var grid = $(gridID);
var pager = $(pagerID);
grid.jqGrid({
url: GetBaseWSUrl() + 'UmltService.asmx/ListUmlts',
colNames: ['Code', 'Description', 'Note'],
colModel: [
{ name: 'Code', index: 'Code', width: 120, template: colTextTemplate },
{ name: 'Description', index: 'Description', width: 220, template: colTextTemplate },
{ name: 'Notes', index: 'Notes', width: 300, template: colTextTemplate }
],
jsonReader: {
id: "UmltID"
},
pager: pager,
sortname: 'Code',
sortorder: "asc",
height: '300',
gridview: true,
width: gridWidth,
autowidth: false,
shrinkToFit: true
}).jqGrid('navGrid', pagerID,
{ add: true, addtitle: 'Add UMLT',
edit: true, edittitle: 'Edit UMLT',
del: true, deltitle: 'Delete UMLT',
refresh: true, refreshtitle: 'Refresh data',
search: true, searchtitle: 'Advanced search filters',
addfunc: function () {
loadUmltDialog(GetBaseWSUrl() + 'UmltService.asmx/NewUmlt', "", dialog);
},
editfunc: function () {
var rowId = grid.jqGrid('getGridParam', 'selrow');
loadUmltDialog(GetBaseWSUrl() + 'UmltService.asmx/EditUmlt', rowId, dialog);
}
},
{ /*default settings for edit*/ },
{ /*default settings for add*/ },
{ mtype: "post", reloadAfterSubmit: false,
url: GetBaseWSUrl() + 'UmltService.asmx/DeleteUmlt',
resize: false, serializeDelData: function (postdata) { return JSON.stringify({ umltID: postdata.id }); },
afterSubmit: function (data, postdata) {
var result = $.parseJSON(data.responseText);
if (result.d.StatusResult === "OK") {
showInfoMessage(result.d.StatusResult, result.d.StatusDescription);
} else {
showErrorMessage("Error", result.d.StatusDescription);
}
return [true, ''];
}
},
{ closeOnEscape: true, multipleSearch: true, closeAfterSearch: true }, {}
).jqGrid('navSeparatorAdd', pagerID, {}).jqGrid('navButtonAdd', pagerID, {
caption: "", buttonicon: "ui-icon-extlink", position: "last", title: "Export to Excel",
onClickButton: function () {
window.open(GetCurrentSiteUrl() + '/_layouts/ExportExcel.aspx?View=UMLT');
}
});
}
Мне нужно использовать этот пользовательский элемент управления внутри веб-части (SharePoint) и внутри другого элемента управления, поэтому я просто добавил в свой проект веб-часть-оболочку и включил элемент управления внутри другой.
Кажется, все работает для веб-части, как видно из следующего снимка экрана
но когда я использую его внутри другого пользовательского элемента управления, у меня возникают две странные проблемы:
- Пользовательская кнопка «Экспорт», добавленная на панель инструментов, дублируется.
- пейджер (страница n из m) показан выровненным по левому краю
Вы можете увидеть это поведение на следующем снимке экрана
Любое предложение?