作成日: 2019/11/27 最終更新日: 2019/12/20
文書種別
不具合
状況
修正済み
詳細
AllowColumnMoveプロパティを有効にしたSPREAD上において、データの連結後に表示する列数を減らしてから列を移動させた場合、データを再連結しようとすると例外(IndexOutOfRangeException)が発生します。
【再現手順】
1.フォーム画面にSPREADとボタンを張り付けサンプルコードを実行
2.画面で列を入れ替える
3.画面のボタンを押してデータを再読み込みすると例外が発生します
■サンプルコード(VB.NET)
【再現手順】
1.フォーム画面にSPREADとボタンを張り付けサンプルコードを実行
2.画面で列を入れ替える
3.画面のボタンを押してデータを再読み込みすると例外が発生します
■サンプルコード(VB.NET)
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
// データ連結
Me.RefreshSpread()
// 列移動の許可
FpSpread1.AllowColumnMove = True
End Sub
Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click
// データ連結
Me.RefreshSpread()
End Sub
Private Sub RefreshSpread()
Dim table As DataTable = New DataTable()
Dim DSt As DataSet = New DataSet()
table = DSt.Tables.Add("SampleTable")
table.Columns.AddRange(New DataColumn() {New DataColumn("ID", System.Type.[GetType]("System.Int32")), New DataColumn("Text", System.Type.[GetType]("System.String")), New DataColumn("Check", System.Type.[GetType]("System.Boolean"))})
table.Rows.Add(New Object() {10, "Web", True})
table.Rows.Add(New Object() {20, "Win", False})
FpSpread1.DataSource = table
FpSpread1.ActiveSheet.ColumnCount = 2
End Sub
// データ連結
Me.RefreshSpread()
// 列移動の許可
FpSpread1.AllowColumnMove = True
End Sub
Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click
// データ連結
Me.RefreshSpread()
End Sub
Private Sub RefreshSpread()
Dim table As DataTable = New DataTable()
Dim DSt As DataSet = New DataSet()
table = DSt.Tables.Add("SampleTable")
table.Columns.AddRange(New DataColumn() {New DataColumn("ID", System.Type.[GetType]("System.Int32")), New DataColumn("Text", System.Type.[GetType]("System.String")), New DataColumn("Check", System.Type.[GetType]("System.Boolean"))})
table.Rows.Add(New Object() {10, "Web", True})
table.Rows.Add(New Object() {20, "Win", False})
FpSpread1.DataSource = table
FpSpread1.ActiveSheet.ColumnCount = 2
End Sub
回避方法
Service Pack 3(v12.0.4504.2012 )で修正済み。
Service Pack を適用せずに対処する方法としては、連結する列数を明示的に設定する方法が考えられます。
■サンプルコード(VB.NET)
Service Pack を適用せずに対処する方法としては、連結する列数を明示的に設定する方法が考えられます。
■サンプルコード(VB.NET)
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
// データ連結
Me.RefreshSpread()
// 列移動の許可
FpSpread1.AllowColumnMove = True
End Sub
Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click
// データ連結
Me.RefreshSpread()
End Sub
Private Sub RefreshSpread()
Dim table As DataTable = New DataTable()
Dim DSt As DataSet = New DataSet()
table = DSt.Tables.Add("SampleTable")
table.Columns.AddRange(New DataColumn() {New DataColumn("ID", System.Type.[GetType]("System.Int32")), New DataColumn("Text", System.Type.[GetType]("System.String")), New DataColumn("Check", System.Type.[GetType]("System.Boolean"))})
table.Rows.Add(New Object() {10, "Web", True})
table.Rows.Add(New Object() {20, "Win", False})
'回避策(連結する列数を明示的に設定します)
FpSpread1.ActiveSheet.ColumnCount = table.Columns.Count
FpSpread1.DataSource = table
FpSpread1.ActiveSheet.ColumnCount = 2
End Sub
// データ連結
Me.RefreshSpread()
// 列移動の許可
FpSpread1.AllowColumnMove = True
End Sub
Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click
// データ連結
Me.RefreshSpread()
End Sub
Private Sub RefreshSpread()
Dim table As DataTable = New DataTable()
Dim DSt As DataSet = New DataSet()
table = DSt.Tables.Add("SampleTable")
table.Columns.AddRange(New DataColumn() {New DataColumn("ID", System.Type.[GetType]("System.Int32")), New DataColumn("Text", System.Type.[GetType]("System.String")), New DataColumn("Check", System.Type.[GetType]("System.Boolean"))})
table.Rows.Add(New Object() {10, "Web", True})
table.Rows.Add(New Object() {20, "Win", False})
'回避策(連結する列数を明示的に設定します)
FpSpread1.ActiveSheet.ColumnCount = table.Columns.Count
FpSpread1.DataSource = table
FpSpread1.ActiveSheet.ColumnCount = 2
End Sub
旧文書番号
84675