2009-09-20 2 views
0

SharePoint 데이터 시트보기 (기본 Excel 워크 시트처럼 보이는 데이터 시트 모드로 목록을 편집 할 때 사용되는보기)의 기능을 확장하거나 수정하는 방법을 발견 한 사람이 있습니까?SharePoint 데이터 시트보기 확장 또는 수정

가능한 경우 여러 가지 작업을 수행해야하지만 아직 그 기능을 변경하기에 알맞은 비 hackish 방법을 찾고 있습니다.

EDIT : 내가하고 싶은 일은 조회 필드에 계단식 필터링을 사용하는 것입니다. 따라서 한 필드에서 선택하면 다른 필드에서 사용 가능한 선택이 제한됩니다. 표준 뷰 형식에서이 작업을 수행하는 방법이 있지만 데이터 시트보기는 완전히 별도입니다.

감사

무은

+0

변경하려는 구체적인 예를 하나 주시겠습니까? – Argalatyr

답변

3

난 당신이 아닌 hackish 방법으로 수정할 수 있다고 생각하지 않습니다,하지만 당신은 처음부터 새로운 데이터 시트보기를 만들 수 있습니다. 이렇게하려면 새 ActiveX 컨트롤을 만들어 COM 개체로 표시하고 web.config 파일을 수정하여 새 ActiveX 컨트롤을 참조합니다. Creating a custom datasheet control.

+0

+1 : 이것이 가능한지 전혀 몰랐습니다! –

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

또한 몇 가지 다른 예가 있습니다. 죄송합니다. 더 이상 링크가 없습니다.

+0

사실 나는 계단식 선택으로 요청한 바를 정확하게 수행했습니다. 나는 외부 목록을 사용하고 데이터를 가져 오는 필터 값을 전달했습니다. 기본적으로 위 코드를 예제로 사용하고 BindToCell 이벤트에서 cellContext.record.properties [ ""] .localizedValue에서 결정 값을 가져옵니다. 그런 다음 OnBeginEdit 이벤트에서 자체 컨트롤을 만들 수 있습니다. – user3457914

관련 문제