0

是否有人发现了一种扩展或修改 SharePoint 数据表视图(在数据表模式下编辑列表时使用的视图,看起来像基本 Excel 工作表的视图)功能的方法?

如果可能的话,我需要对它做几件事,但我还没有找到一种体面的非黑客方式来改变它的任何功能。

编辑:我希望做的一个例子是在查找字段上启用级联过滤 - 因此一个字段中的选择限制了另一个字段中的可用选择。在标准视图表单中有一种方法可以做到这一点,但数据表视图是完全独立的。

问候

4

2 回答 2

3

我认为您不能以任何非骇客的方式对其进行修改,但您可以从头开始创建新的数据表视图。为此,您可以创建一个新的 ActiveX 控件,并将其公开为 COM 对象,然后修改 web.config 文件以引用新的 ActiveX 控件。

这里有一个示例: 创建自定义数据表控件。

于 2009-09-21T04:08:12.840 回答
0

实际上,您可以这样做。这是我从某个地方剥离的代码片段,我正在按照您的要求进行操作。我试图删除细节。

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');
})();   

此外,还有其他几个例子。对不起,我没有链接了:

于 2018-02-02T18:10:56.360 回答