是否有人发现了一种扩展或修改 SharePoint 数据表视图(在数据表模式下编辑列表时使用的视图,看起来像基本 Excel 工作表的视图)功能的方法?
如果可能的话,我需要对它做几件事,但我还没有找到一种体面的非黑客方式来改变它的任何功能。
编辑:我希望做的一个例子是在查找字段上启用级联过滤 - 因此一个字段中的选择限制了另一个字段中的可用选择。在标准视图表单中有一种方法可以做到这一点,但数据表视图是完全独立的。
问候
哞
是否有人发现了一种扩展或修改 SharePoint 数据表视图(在数据表模式下编辑列表时使用的视图,看起来像基本 Excel 工作表的视图)功能的方法?
如果可能的话,我需要对它做几件事,但我还没有找到一种体面的非黑客方式来改变它的任何功能。
编辑:我希望做的一个例子是在查找字段上启用级联过滤 - 因此一个字段中的选择限制了另一个字段中的可用选择。在标准视图表单中有一种方法可以做到这一点,但数据表视图是完全独立的。
问候
哞
我认为您不能以任何非骇客的方式对其进行修改,但您可以从头开始创建新的数据表视图。为此,您可以创建一个新的 ActiveX 控件,并将其公开为 COM 对象,然后修改 web.config 文件以引用新的 ActiveX 控件。
这里有一个示例: 创建自定义数据表控件。
实际上,您可以这样做。这是我从某个地方剥离的代码片段,我正在按照您的要求进行操作。我试图删除细节。
var gridFieldOverrideExample = (function (){
function fieldView(ctx){
var val=ctx.CurrentItem[curFieldName];
var spanId=curFieldName+"span"+ctx.CurrentItem.ID;
if (ctx.inGridMode){
handleGridField(ctx, spanId);
}
return "<span id='"+spanId+"'>"+val+"</span>";
}
function handleGridField(ctx, spanID){
window.SP.SOD.executeOrDelayUntilScriptLoaded(function(){
window.SP.GanttControl.WaitForGanttCreation(function (ganttChart){
var gridColumn = null;
var editID = "EDIT_"+curFieldName+"_GRID_FIELD";
var columns = ganttChart.get_Columns();
for(var i=0;i<columns.length;i++){
if(columns[i].columnKey == curFieldName){
gridColumn = columns[i];
break;
}
}
if (gridColumn){
gridColumn.fnGetEditControlName = function(record, fieldKey){
return editID;
};
window.SP.JsGrid.PropertyType.Utils.RegisterEditControl(editID, function (ctx) {
editorInstance = new SP.JsGrid.EditControl.EditBoxEditControl(ctx, null);
editorInstance.NewValue = "";
editorInstance.SetValue = function (value) {
_cellContext = editorInstance.GetCellContext();
_cellContext.SetCurrentValue({ localized: value });
};
editorInstance.Unbind = function () {
//This happens when the grid cell loses focus - hide controls here, do cleanup, etc.
}
//Below I grabbed a reference to the original 'BindToCell' function so I can prepend to it by overwriting the event.
var origbtc = editorInstance.BindToCell;
editorInstance.BindToCell = function(cellContext){
if ((cellContext.record) &&
(cellContext.record.properties) &&
(cellContext.record.properties.ID) &&
(cellContext.record.properties.ID.dataValue)){
editorInstance.ItemID = cellContext.record.properties.ID.dataValue;
}
origbtc(cellContext);
};
//Below I grabbed a reference to the original 'OnBeginEdit' function so I can prepend to it by overwriting the event.
var origbte = editorInstance.OnBeginEdit;
editorInstance.TargetID;
editorInstance.OnBeginEdit = function (cellContext){
this.TargetID = cellContext.target.ID;
/*
. . .
Here is where you would include any custom rendering
. . .
*/
origbte(cellContext);
};
return editorInstance;
}, []);
}
});
},"spgantt.js");
}
return{
fieldView : fieldView
}
})();
(function () {
function OverrideFields(){
var overrideContext = {};
overrideContext.Templates = overrideContext.Templates || {};
overrideContext.Templates.Fields = {
'FieldToOverride' : {
'View': gridFieldOverrideExample.fieldView
}
};
SPClientTemplates.TemplateManager.RegisterTemplateOverrides(overrideContext);
}
ExecuteOrDelayUntilScriptLoaded(OverrideFields, 'clienttemplates.js');
})();
此外,还有其他几个例子。对不起,我没有链接了: