2009-11-05 22 views
1

我試圖編寫一個自定義字段,表示在任務上花費的時間。本場從NumberField派生(數量佔分鍾),但我想將其顯示在列表上爲HH:MM爲此我試圖覆蓋休耕功能:如何修改自定義字段在共享點列表(allitems視圖)上的外觀?

 protected override void RenderFieldForDisplay(System.Web.UI.HtmlTextWriter output) 
    { 
     Label timeSpan = new Label(); 
     timeSpan.Text = ((int)this.Value/60).ToString() + ":" + ((int)this.Value % 60).ToString(); 
     timeSpan.RenderControl(output); 
     //base.RenderFieldForDisplay(timeSpan.RenderControl()); 
    } 

我不是一個ASP .NET開發人員,所以我試圖避免定義DisplayTemplate。

你能告訴我如何以編程方式呈現它或只是把我推向正確的方向嗎?

解決方案

解決與Kusek答案的幫助。在fldtypes_HourField.xml:

<RenderPattern Name="DisplayPattern"> 
    <HTML><![CDATA[<div align='right'>]]></HTML> 
    <Switch> 
    <Expr> 
     <Column /> 
    </Expr> 
    <Case Value="" /> 
    <Default> 
     <HTML><![CDATA[<script src="/_layouts/hourField.js"></script>]]></HTML> 
     <HTML><![CDATA[<div><SCRIPT>formatHourField("]]></HTML> 
     <Column /> 
     <HTML><![CDATA[");</SCRIPT></div>]]></HTML> 
    </Default> 
    </Switch> 
</RenderPattern> 

而且hourField.js

function formatHourField(t) { 
    var m = t % 60; 
    var h = (t - m)/ 60; 
    document.write(h + ":" + m); 
} 

銘記什麼,我已經嘗試 - 這個解決方案看起來完美的簡單:)

回答

1

所呈現的價值在所有項目視圖中不基於模板或控件。它是從

<RenderPattern Name="DisplayPattern"> 
    <Switch> 
    <Expr><Column /></Expr> 
    <Case Value="" /> 
    <Default> 
     <Column SubColumnNumber="1" HTMLEncode="TRUE" /> 
     <HTML><![CDATA[,&nbsp;]]></HTML> 
     <Column SubColumnNumber="0" HTMLEncode="TRUE" /> 
    </Default> 
    </Switch> 
</RenderPattern> 

您定義的字段架構的標記。顯示模板定義它在Disp Form中的顯示方式。希望這可以幫助。

在CAML表示法中獲取格式將會有一些小技巧。 你可以得到一些關於這個主題的信息here

相關問題