0

さて、私は2日間解決しようとしてきたユニークな問題を抱えています。

System.Web.UI.WebControls.WebParts.WebPartコントロールがあり、カスタムSharepointビューを作成しています。私がやりたいことのほとんどは、1つの小さな問題を除いて機能しています。日付と通貨のフィールドをフォーマットするには、Javascriptを使用する必要があります。クライアントは、DateTimeフィールドをmm / dd / yyyyにし、通貨には必要に応じて$とコンマを含めることを望んでいます。

これは、通常のaspxページのjavascriptでは十分に簡単です。関数を記述し、ページの読み込み時に

protected void Page_Load(object sender, EventArgs e)  
{  
    if (!IsPostBack)  
    {  
        GridFieldDAO dao = new GridFieldDAO();  
        myGrid.DataSource = dao.getItems();  
        myGrid.DataBind();  
    }  
    GetBuildFormattingScript();  
}  

private void GetBuildFormattingScript()  
{  
    string script = "<script type=\"text/javascript\">";  
    script += " FormatByRows(\"" + myGrid.ClientID + "\",2);";  
    script += " FormatByRowsDate(\"" + myGrid.ClientID + "\",1);";  
    script += "</script>";  
    if(!ClientScript.IsClientScriptBlockRegistered("DoFormatting"))  
    ClientScript.RegisterStartupScript(typeof(string), "DoFormatting", script);  

    string script2 = "   <script type=\"text/javascript\">"+   
        "var prm = Sys.WebForms.PageRequestManager.getInstance(); "+  
        "prm.add_beginRequest(BeginRequestHandler); "+  
        "prm.add_endRequest(EndRequestHandler); "+  
        "function BeginRequestHandler(sender, args)  "+  
        "{ }"+  
        "function EndRequestHandler(sender, args)  "+  
        "{ FormatByRows(\"" + myGrid.ClientID + "\",2); "+  
        " FormatByRowsDate(\""+myGrid.ClientID+"\",1);}</script> ";  

    if (!ClientScript.IsClientScriptBlockRegistered("DoUpdateFormatting"))  
        ClientScript.RegisterStartupScript(typeof(string), "DoUpdateFormatting", script2);  
}

WebPartのOnLoadに、更新したいグリッドが存在しないという私の問題があります...そのため、OnPreRenderにコードを追加する必要があります。

WebPArtが読み込まれ、Javascriptが起動しないので、[更新]をクリックすると起動します。誰かが私が最初のWebPartロードでコードを動作させるのを手伝ってもらえますか?誰かがサーバーサイドスクリプトをSharePointでこのように機能させることができましたか?

ありがとう、マイクV

4

1 に答える 1

4

このために、以下を利用できます_spBodyOnLoadFunctionNames

string script = "<script type=\"text/javascript\">";   
script += " function FormatDataGridRows() {";
script += "    FormatByRows(\"" + myGrid.ClientID + "\",2);";   
script += "    FormatByRowsDate(\"" + myGrid.ClientID + "\",1);";   
script += " }";
script += " _spBodyOnLoadFunctionNames.push('FormatDataGridRows');";
script += "</script>";   

編集 テストするには、ページのコンテンツ エディター Web パーツに次のコードを挿入します。

<script type="text/javascript">
function SayHello() {
   alert('hello world!');
}
_spBodyOnLoadFunctionNames.push("SayHello");
</script>
于 2010-07-26T20:41:45.153 に答える