作成日: 2017/07/28 最終更新日: 2017/12/22
文書種別
不具合
状況
修正済み
詳細
TopRowプロパティが正しく動作しない場合があります。
【再現コード】
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Page.IsPostBack Then Return
FpSpread1.ActiveSheetView.IgnoreHiddenRowsWhenPaging = False
FpSpread1.ActiveSheetView.Rows.Count = 35
FpSpread1.ActiveSheetView.PageSize = 10
End Sub
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
FpSpread1.ActiveSheetView.TopRow = 26
End Sub
【再現手順】
1.プロジェクトを起動します
2.Button1をクリックします
-- 31行目が先頭になります(26を指定しているので27行目が先頭になるのが本来の動作です)
【再現コード】
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Page.IsPostBack Then Return
FpSpread1.ActiveSheetView.IgnoreHiddenRowsWhenPaging = False
FpSpread1.ActiveSheetView.Rows.Count = 35
FpSpread1.ActiveSheetView.PageSize = 10
End Sub
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
FpSpread1.ActiveSheetView.TopRow = 26
End Sub
【再現手順】
1.プロジェクトを起動します
2.Button1をクリックします
-- 31行目が先頭になります(26を指定しているので27行目が先頭になるのが本来の動作です)
回避方法
Service Pack 2(v10.0.4005.2013)で修正済み。
Service Pack 2より前のバージョンでは次の回避方法が有効です。
------------------------------------------
通常の行の後に非表示行を追加した上で、サーバー側およびクライアント側でページの状態を判定し、コマンドバーのボタンを制御する方法が考えられます。なお、回避策の実行する際にはfp_clientフォルダに含まれる「Next-d.gif」および「Next.gif」をプロジェクトファイルに含める必要があります。
------------------------------------
Webフォームクラス
------------------------------------
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If (IsPostBack) Then Return
FpSpread1.ActiveSheetView.IgnoreHiddenRowsWhenPaging = False
FpSpread1.ActiveSheetView.Rows.Count = 35
FpSpread1.ActiveSheetView.PageSize = 10
' 回避策
FpSpread1.EnableAjaxCall = False
FpSpread1.ActiveSheetView.Rows.Add(FpSpread1.ActiveSheetView.RowCount, FpSpread1.ActiveSheetView.PageSize)
FpSpread1.ActiveSheetView.Rows(FpSpread1.ActiveSheetView.RowCount - FpSpread1.ActiveSheetView.PageSize, FpSpread1.ActiveSheetView.RowCount - 1).Visible = False
End Sub
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
FpSpread1.ActiveSheetView.TopRow = 26
'回避策(ページの状態をクライアントサイドに送る)
If (FpSpread1.ActiveSheetView.TopRow >= 30) Then
NeedDisabled.Value = "disabled"
Else
NeedDisabled.Value = "enabled"
End If
End Sub
'回避策(ページの状態をクライアントサイドに送る)
Private Sub FpSpread1_TopRowChanged(sender As Object, e As SpreadCommandEventArgs) Handles FpSpread1.TopRowChanged
If e.SheetView.TopRow >= 30 Then
NeedDisabled.Value = "disabled"
Else
NeedDisabled.Value = "enabled"
End If
End Sub
------------------------------------
クライアント側スクリプト
------------------------------------
onload = init;
function init() {
var spread = new FpSpread("FpSpread1");
var button1 = document.getElementById("<%=NeedDisabled.ClientID%>");
var value = button1.value;
var next = document.getElementById("FpSpread1_Next");
// ページの状態に応じてアイコンを切り替える
if (value == "disabled") {
next.setAttribute("disabled", true);
next.src = "Next-d.gif";
} else {
next.src = "Next.gif";
}
}
------------------------------------
aspxファイル
------------------------------------
<asp:Button ID="Button1" runat="server" Text="Button" />
<input type="hidden" runat="server" value="enabled" id="NeedDisabled" />
<FarPoint:FpSpread ID="FpSpread1" runat="server" BorderColor="#A0A0A0" BorderStyle="Solid" BorderWidth="1px" Height="200" Width="400">
<commandbar backcolor="#F6F6F6" buttonfacecolor="Control" buttonhighlightcolor="ControlLightLight" buttonshadowcolor="ControlDark">
</commandbar>
<sheets>
<FarPoint:SheetView SheetName="Sheet1">
</FarPoint:SheetView>
</sheets>
</FarPoint:FpSpread>
Service Pack 2より前のバージョンでは次の回避方法が有効です。
------------------------------------------
通常の行の後に非表示行を追加した上で、サーバー側およびクライアント側でページの状態を判定し、コマンドバーのボタンを制御する方法が考えられます。なお、回避策の実行する際にはfp_clientフォルダに含まれる「Next-d.gif」および「Next.gif」をプロジェクトファイルに含める必要があります。
------------------------------------
Webフォームクラス
------------------------------------
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If (IsPostBack) Then Return
FpSpread1.ActiveSheetView.IgnoreHiddenRowsWhenPaging = False
FpSpread1.ActiveSheetView.Rows.Count = 35
FpSpread1.ActiveSheetView.PageSize = 10
' 回避策
FpSpread1.EnableAjaxCall = False
FpSpread1.ActiveSheetView.Rows.Add(FpSpread1.ActiveSheetView.RowCount, FpSpread1.ActiveSheetView.PageSize)
FpSpread1.ActiveSheetView.Rows(FpSpread1.ActiveSheetView.RowCount - FpSpread1.ActiveSheetView.PageSize, FpSpread1.ActiveSheetView.RowCount - 1).Visible = False
End Sub
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
FpSpread1.ActiveSheetView.TopRow = 26
'回避策(ページの状態をクライアントサイドに送る)
If (FpSpread1.ActiveSheetView.TopRow >= 30) Then
NeedDisabled.Value = "disabled"
Else
NeedDisabled.Value = "enabled"
End If
End Sub
'回避策(ページの状態をクライアントサイドに送る)
Private Sub FpSpread1_TopRowChanged(sender As Object, e As SpreadCommandEventArgs) Handles FpSpread1.TopRowChanged
If e.SheetView.TopRow >= 30 Then
NeedDisabled.Value = "disabled"
Else
NeedDisabled.Value = "enabled"
End If
End Sub
------------------------------------
クライアント側スクリプト
------------------------------------
onload = init;
function init() {
var spread = new FpSpread("FpSpread1");
var button1 = document.getElementById("<%=NeedDisabled.ClientID%>");
var value = button1.value;
var next = document.getElementById("FpSpread1_Next");
// ページの状態に応じてアイコンを切り替える
if (value == "disabled") {
next.setAttribute("disabled", true);
next.src = "Next-d.gif";
} else {
next.src = "Next.gif";
}
}
------------------------------------
aspxファイル
------------------------------------
<asp:Button ID="Button1" runat="server" Text="Button" />
<input type="hidden" runat="server" value="enabled" id="NeedDisabled" />
<FarPoint:FpSpread ID="FpSpread1" runat="server" BorderColor="#A0A0A0" BorderStyle="Solid" BorderWidth="1px" Height="200" Width="400">
<commandbar backcolor="#F6F6F6" buttonfacecolor="Control" buttonhighlightcolor="ControlLightLight" buttonshadowcolor="ControlDark">
</commandbar>
<sheets>
<FarPoint:SheetView SheetName="Sheet1">
</FarPoint:SheetView>
</sheets>
</FarPoint:FpSpread>
旧文書番号
40846