【操作】 ユーザーコントロールにSPREADを配置すると、独自に作成したコマンドバーボタンがコールバック後に消える
対象製品
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ページを起動し、独自作成したコマンドバーのボタンをクリックします
-- 独自作成したコマンドバーのボタンが消えます
【再現コード】
---------------------------------
ユーザーコントロールクラス
---------------------------------
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
---------------------------------
ユーザーコントロールクラス
---------------------------------
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