【操作】 ユーザーコントロールにSPREADを配置すると、独自に作成したコマンドバーボタンがコールバック後に消える

文書番号 : 37431     文書種別 : 制限事項     登録日 : 2014/07/30     最終更新日 : 2014/07/30
文書を印刷する
対象製品
SPREAD for ASP.NET 7.0J
詳細
ユーザーコントロールにSPREADを配置すると、独自に作成したコマンドバーボタンがコールバック後に消えます。

【再現コード】
---------------------------------
ユーザーコントロールクラス
---------------------------------
Public Class WebUserControl1
  Inherits System.Web.UI.UserControl

  Protected MyBtn As Button
  Protected Overrides Sub Render(ByVal writer As HtmlTextWriter)
    Dim con As Control = FpSpread1.FindControl("Copy")

    Dim tc As TableCell = CType(con.Parent, TableCell)
    Dim tr As TableRow = CType(tc.Parent, TableRow)

    Dim c As New TableCell
    c.Controls.Add(MyBtn)

    tr.Cells.Add(c)
    MyBase.Render(writer)
  End Sub

  Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
    MyBtn = New Button
    MyBtn.Width = Unit.Pixel(20)
    MyBtn.Height = Unit.Pixel(20)
    MyBtn.BackColor = Drawing.Color.Red

    MyBtn.CommandName = "ping"
    'Dim cs As ClientScriptManager = Page.ClientScript
    'Dim sarg As String = "javascript:" + cs.GetPostBackEventReference(FpSpread1, "ping") + ";window.event.returnValue=false;return false;"
    Dim sarg As String = "javascript:" + FpSpread1.ClientID + ".CallBack('ping');return false;"
    MyBtn.Attributes.Add("onclick", sarg)
  End Sub

  Protected Sub MyBtn_Command(ByVal sender As Object, ByVal e As FarPoint.Web.Spread.SpreadCommandEventArgs) Handles FpSpread1.ButtonCommand
    If e.CommandName = "ping" Then
      FpSpread1.Sheets(0).Cells(0, 0).Text += "Clicked"
    End If
  End Sub
End Class

【再現手順】
1.新規ユーザーコントロールにSPREADを用意します
2.ユーザーコントロールのソースとして再現コードを貼り付けます。
3.新規Webフォームを作成し、上記のユーザーコントロールを配置します
4.Webページを起動し、独自作成したコマンドバーのボタンをクリックします
 -- 独自作成したコマンドバーのボタンが消えます
回避方法
ユーザーコントロールのInitとRenderに記述しているコードを、SPREADのInitとPreRenderで実装します。

---------------------------------
ユーザーコントロールクラス
---------------------------------
Public Class WebUserControl1
  Inherits System.Web.UI.UserControl

  Protected MyBtn As Button

  Protected Sub MyBtn_Command(ByVal sender As Object, ByVal e As FarPoint.Web.Spread.SpreadCommandEventArgs) Handles FpSpread1.ButtonCommand
    If e.CommandName = "ping" Then
      FpSpread1.Sheets(0).Cells(0, 0).Text = DateTime.Now.ToString("mm:ss")
    End If
  End Sub

  Private Sub FpSpread1_Init(sender As Object, e As EventArgs) Handles FpSpread1.Init
    MyBtn = New Button
    MyBtn.Width = Unit.Pixel(20)
    MyBtn.Height = Unit.Pixel(20)
    MyBtn.BackColor = Drawing.Color.Red
    Dim sarg As String = "javascript:" + FpSpread1.ClientID + ".CallBack('ping');return false;"
    MyBtn.Attributes.Add("onclick", sarg)
  End Sub

  Private Sub FpSpread1_PreRender(sender As Object, e As EventArgs) Handles FpSpread1.PreRender
    Dim con As Control = FpSpread1.FindControl("Copy")
    Dim tc As TableCell = CType(con.Parent, TableCell)
    Dim tr As TableRow = CType(tc.Parent, TableRow)
    Dim c As New TableCell
    c.Controls.Add(MyBtn)
    tr.Cells.Add(c)
  End Sub
End Class