2011-07-26 18 views
0

私はpage_initで動的に作成され、ページのupdatePanelの内側にあるプレースホルダに追加されたRadGridコントロールを持っています。部分的なポストバックは、完全なポストの「戻る」ボタンが部分的なポストバックとして機能するのをなぜですか?

RadGridのCommandItemセクションに新しいButtonを追加する必要があります。ボタンは完全なポストバックをサポートする必要があります。

RadGrid)がRadGrid_ItemCreated(と呼ばれるイベントがあり、それは私が私の新しいボタンを追加しましたところだし、それは私のRadGridに表示されます:

protected virtual void RdGridItemCreated(object sender, GridItemEventArgs e) 
    { 
     var itemType = e.Item.ItemType; 

     switch (itemType) 
     {   
      // other cases... 
      case GridItemType.CommandItem: 
       { 
        var gridCommandItem = e.Item as GridCommandItem; 

        if (gridCommandItem == null) return; 

        if (this.EnablePdfExport) 
        { 
         var pdfButton = CreateExportToPdfButton(); 

         PageUtil.RegisterPostBackControl(pdfButton); 

         // this is the cell which contains the export buttons. 
         ((Table)gridCommandItem.Cells[0].Controls[0]).Rows[0].Cells[1].Controls.Add(pdfButton);               
        } 
        break; 
       } 
     } 
    } 

ボタンをクリックしてイベントを持ち、メソッドが追加されましたイベントハンドラとして:

private Button CreateExportToPdfButton() 
    { 
     var result = new Button(); 
     result.ID = "btnExportToPdf"; 
     result.Click += ExportToPdfButtonClick; 
     result.CssClass = "rgExpPDF"; 
     result.CommandName = "ExportToPdf"; 
     result.Attributes.Add("title", "Export to Pdf");    
     return result; 
    } 

は私がのScriptManagerのRegisterPostBackControl()メソッドを使用しましたこのコントロールのポストバックイベントを登録するには。

私はRadGrid上のボタンをクリックすると、サーバーへのポストバック
public static void RegisterPostBackControl(Control control) 
    { 
     var currentPage = (Page) HttpContext.Current.CurrentHandler; 
     var currentScriptManager = ScriptManager.GetCurrent(currentPage); 
     if (currentScriptManager != null) 
     { 
      currentScriptManager.RegisterPostBackControl(control); 
     } 
    } 

が、問題はそのClickイベントが発生されることはありませんということです。

private void ExportToPdfButtonClick(object sender, EventArgs e) 
    { 
     // process 
    } 

私は理由を理解していません。任意の考え/助け?

ボタンのIDを設定しないと、クリックイベントが発生しますが、その場合は新しい問題が発生します。 Radgridを更新するために外部ドロップダウンリストによってページ上で部分的なポストバックが発生すると、私のカスタムエクスポートボタンがポストバックを非同期的に送信しますが、ポストバックは完全にポストバックする必要があります。

多くのおかげで、

答えて

0

は、私は次のイベントで新しいコントロールを追加することによってそれを修正:

this.RadGrid.MasterTableView.Init += MasterTableViewInit; 

void MasterTableViewInit(object sender, EventArgs e) 
    { 
     if (!this.EnablePdfExport) return; 

     var commandItem = this.RadGrid.MasterTableView.GetItems(GridItemType.CommandItem).SingleOrDefault(); 

     if (commandItem == null) return; 

     AddPdfButton(commandItem as GridCommandItem); 
    } 
0

私は同じ問題を抱えています。レンダリング中にRadGridの子コントロールのVisibleプロパティをfalseに切り替えるTelerikまで追跡しました。これは、PageRequestManagerがポストバックコントロール用のJavaScriptを書き込む前にRenderが呼び出され、Visibleではないコントロールをスキップするため、部分ページポストバックにのみ影響します。完全なポストバック(または最初のページの読み込み)の場合、PageRequestManagerはポストバックコントロール用のJavaScriptをRadGridがレンダリングされる前に書き込むため、コントロールはVisibleのままです。

Telerikがこれを行っている理由はわかりません。なぜならレンダリング段階でVisibleプロパティに問題が発生するためです。

関連する問題