【スクリプト】固定列の設定を行うとGetSheetColIndex メソッドで正しい値が取得できない
対象製品
SPREAD for .NET 2.5J Web Forms Edition
発生環境
動作保証環境と同様
状況
修正済み
詳細
固定列(FrozenColumnCount)の設定を行うと、クライアント側スクリプトのGetSheetColIndex メソッドで正しい値を取得できない場合があります。
【再現手順】
1.新規WebフォームにSPREADとボタンを配置します
2.下記サンプルコードをコピーします
3.ボタンをクリックします
4.GetSheetColIndex(5)の戻り値が「-1」になります
【サンプルコード】
-------------------------
Webフォームクラス
-------------------------
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If Page.IsPostBack Then
Return
End If
FpSpread1.ActiveSheetView.ColumnCount = 10
FpSpread1.ActiveSheetView.FrozenColumnCount = 5
End Sub
-------------------------
クライアント側スクリプト
-------------------------
<script language="javascript">
function cellCheck()
{
var spread = document.all("FpSpread1");
alert(spread.GetSheetColIndex(5));
}
</script>
------------------------------------
HTML
※スクリプトテスト用のHTMLボタン
------------------------------------
<INPUT style="Z-INDEX: 102; LEFT: 16px; POSITION: absolute; TOP: 8px" type="button" value="Button" onclick="cellCheck();">
【再現手順】
1.新規WebフォームにSPREADとボタンを配置します
2.下記サンプルコードをコピーします
3.ボタンをクリックします
4.GetSheetColIndex(5)の戻り値が「-1」になります
【サンプルコード】
-------------------------
Webフォームクラス
-------------------------
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If Page.IsPostBack Then
Return
End If
FpSpread1.ActiveSheetView.ColumnCount = 10
FpSpread1.ActiveSheetView.FrozenColumnCount = 5
End Sub
-------------------------
クライアント側スクリプト
-------------------------
<script language="javascript">
function cellCheck()
{
var spread = document.all("FpSpread1");
alert(spread.GetSheetColIndex(5));
}
</script>
------------------------------------
HTML
※スクリプトテスト用のHTMLボタン
------------------------------------
<INPUT style="Z-INDEX: 102; LEFT: 16px; POSITION: absolute; TOP: 8px" type="button" value="Button" onclick="cellCheck();">
回避方法
2007/09/05版で修正済み。
2007/09/05版より前のバージョンでは次の回避方法が有効です。
下記のサンプルコードのように、サーバー側で非表示列の情報をクライアント側に送信し、その情報を元にクライアント側でサーバー側の列インデックスを取得します。
【サンプルコード】
------------------------------------
Webフォームクラス
------------------------------------
Private hiddencols As String
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If Page.IsPostBack Then
Return
End If
FpSpread1.ActiveSheetView.ColumnCount = 10
FpSpread1.ActiveSheetView.Columns(3).Visible = False
FpSpread1.ActiveSheetView.Columns(6).Visible = False
FpSpread1.ActiveSheetView.FrozenColumnCount = 3
End Sub
Private Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.PreRender
Dim i As Integer
'非表示列の情報を作成します
hiddencols = ""
For i = 0 To FpSpread1.ActiveSheetView.ColumnCount - 1
hiddencols += Convert.ToInt32(FpSpread1.ActiveSheetView.GetColumnVisible(i)).ToString + ","
Next
Dim Script As String = "" 'スクリプト文
Script += "<script Language='javascript'>" + vbNewLine
Script += "var hiddencols;" + vbNewLine
Script += "hiddencols = """ + hiddencols + """;" + vbNewLine
'cellCheck:表示されている全ての列で対応するサーバー側の列インデックスをアラートで表示します
Script += "function cellCheck()" + vbNewLine
Script += "{" + vbNewLine
Script += "var spread = document.all(""FpSpread1"");" + vbNewLine
Script += "var colcount = spread.GetColCount();" + vbNewLine
Script += "for (var i=0; i<colcount; i++)" + vbNewLine
Script += "{" + vbNewLine
Script += "var col = GetColIndex(i);" + vbNewLine
Script += "alert(i + ""→"" + col);" + vbNewLine
Script += "}" + vbNewLine
Script += "}" + vbNewLine
'GetColIndex:表示上の指定した列に対応するサーバー側の列インデックスを取得します
Script += "function GetColIndex(col)" + vbNewLine
Script += "{" + vbNewLine
Script += "var c = col;" + vbNewLine
Script += "var s;" + vbNewLine
Script += "var i = 0;" + vbNewLine
Script += "var hiddens=0;" + vbNewLine
Script += "s = hiddencols.split("","");" + vbNewLine
Script += "//指定列までの間の非表示列の数をカウントします" + vbNewLine
Script += "while(i <= col + hiddens)" + vbNewLine
Script += "{" + vbNewLine
Script += "if (s[i] == ""0"")" + vbNewLine
Script += "{" + vbNewLine
Script += "hiddens++;" + vbNewLine
Script += "}" + vbNewLine
Script += "i++;" + vbNewLine
Script += "}" + vbNewLine
Script += "c = c + hiddens;" + vbNewLine
Script += "return c;" + vbNewLine
Script += "}" + vbNewLine
Script += "</script>" + vbNewLine
'現在ページの先頭行と非表示行/列の情報をクライアント側ページに書き込みます
RegisterClientScriptBlock("client", Script)
End Sub
------------------------------------
HTML
※スクリプトテスト用のHTMLボタン
------------------------------------
<INPUT style="Z-INDEX: 102; LEFT: 16px; POSITION: absolute; TOP: 8px" type="button" value="Button" onclick="cellCheck();">
2007/09/05版より前のバージョンでは次の回避方法が有効です。
下記のサンプルコードのように、サーバー側で非表示列の情報をクライアント側に送信し、その情報を元にクライアント側でサーバー側の列インデックスを取得します。
【サンプルコード】
------------------------------------
Webフォームクラス
------------------------------------
Private hiddencols As String
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If Page.IsPostBack Then
Return
End If
FpSpread1.ActiveSheetView.ColumnCount = 10
FpSpread1.ActiveSheetView.Columns(3).Visible = False
FpSpread1.ActiveSheetView.Columns(6).Visible = False
FpSpread1.ActiveSheetView.FrozenColumnCount = 3
End Sub
Private Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.PreRender
Dim i As Integer
'非表示列の情報を作成します
hiddencols = ""
For i = 0 To FpSpread1.ActiveSheetView.ColumnCount - 1
hiddencols += Convert.ToInt32(FpSpread1.ActiveSheetView.GetColumnVisible(i)).ToString + ","
Next
Dim Script As String = "" 'スクリプト文
Script += "<script Language='javascript'>" + vbNewLine
Script += "var hiddencols;" + vbNewLine
Script += "hiddencols = """ + hiddencols + """;" + vbNewLine
'cellCheck:表示されている全ての列で対応するサーバー側の列インデックスをアラートで表示します
Script += "function cellCheck()" + vbNewLine
Script += "{" + vbNewLine
Script += "var spread = document.all(""FpSpread1"");" + vbNewLine
Script += "var colcount = spread.GetColCount();" + vbNewLine
Script += "for (var i=0; i<colcount; i++)" + vbNewLine
Script += "{" + vbNewLine
Script += "var col = GetColIndex(i);" + vbNewLine
Script += "alert(i + ""→"" + col);" + vbNewLine
Script += "}" + vbNewLine
Script += "}" + vbNewLine
'GetColIndex:表示上の指定した列に対応するサーバー側の列インデックスを取得します
Script += "function GetColIndex(col)" + vbNewLine
Script += "{" + vbNewLine
Script += "var c = col;" + vbNewLine
Script += "var s;" + vbNewLine
Script += "var i = 0;" + vbNewLine
Script += "var hiddens=0;" + vbNewLine
Script += "s = hiddencols.split("","");" + vbNewLine
Script += "//指定列までの間の非表示列の数をカウントします" + vbNewLine
Script += "while(i <= col + hiddens)" + vbNewLine
Script += "{" + vbNewLine
Script += "if (s[i] == ""0"")" + vbNewLine
Script += "{" + vbNewLine
Script += "hiddens++;" + vbNewLine
Script += "}" + vbNewLine
Script += "i++;" + vbNewLine
Script += "}" + vbNewLine
Script += "c = c + hiddens;" + vbNewLine
Script += "return c;" + vbNewLine
Script += "}" + vbNewLine
Script += "</script>" + vbNewLine
'現在ページの先頭行と非表示行/列の情報をクライアント側ページに書き込みます
RegisterClientScriptBlock("client", Script)
End Sub
------------------------------------
HTML
※スクリプトテスト用のHTMLボタン
------------------------------------
<INPUT style="Z-INDEX: 102; LEFT: 16px; POSITION: absolute; TOP: 8px" type="button" value="Button" onclick="cellCheck();">
キーワード
SPRN06218
この文書は、以前は次のバグレポートIDで公開されていました : 6953