自動マージされたセルが含まれる行や列を削除すると、例外が発生する場合がある
対象製品
SPREAD for WPF 1.0J
状況
修正済み
詳細
アクティブセル(アクティブ行)に自動マージが含まれ、またアクティブ行の追加後、行の移動が行われない状態で行を削除しようとすると、例外が発生します。
また、列の追加と削除においても同様の現象が発生します。
【手順】
1.新規ウィンドウにSPREAD1つとButton2つ(AddButtonとRemoveButton)を配置します
2.下記サンプルコードをコピーし、アプリケーションを実行します
3.最終行を選択します。
4.AddButtonをクリックします
5.RemoveButtonをクリックします
--例外が発生します
◎サンプルコード(VB)
◎サンプルコード(C#)
また、列の追加と削除においても同様の現象が発生します。
【手順】
1.新規ウィンドウにSPREAD1つとButton2つ(AddButtonとRemoveButton)を配置します
2.下記サンプルコードをコピーし、アプリケーションを実行します
3.最終行を選択します。
4.AddButtonをクリックします
5.RemoveButtonをクリックします
--例外が発生します
◎サンプルコード(VB)
Public Sub New()
' この呼び出しはデザイナーで必要です。
InitializeComponent()
GcSpreadGrid1.Columns(0).MergePolicy = MergePolicy.Always
GcSpreadGrid1.RowCount = 5
For i As Integer = 0 To 5
gcSpreadGrid1(i, 0).Value = (i + 1).ToString()
Next
End Sub
Private Sub AddButton_Click(sender As Object, e As RoutedEventArgs) Handles AddButton.Click
Dim newRow As Integer = GcSpreadGrid1.Rows.AddUnboundRow()
GcSpreadGrid1(newRow, 0).Value = GcSpreadGrid1(newRow - 1, 0).Value
End Sub
Private Sub RemoveButton_Click(sender As Object, e As RoutedEventArgs) Handles RemoveButton.Click
GcSpreadGrid1.Rows.Remove(GcSpreadGrid1.ActiveRowIndex)
End Sub
◎サンプルコード(C#)
public MainWindow()
{
InitializeComponent();
gcSpreadGrid1.Columns[0].MergePolicy = MergePolicy.Always;
gcSpreadGrid1.RowCount = 5;
for (int i = 0; i < 5; i++)
{
gcSpreadGrid1[i, 0].Value = (i + 1).ToString();
}
}
private void AddButton_Click(object sender, RoutedEventArgs e)
{
int newRow = gcSpreadGrid1.Rows.AddUnboundRow();
gcSpreadGrid1[newRow, 0].Value = gcSpreadGrid1[newRow - 1, 0].Value;
}
private void RemoveButton_Click(object sender, RoutedEventArgs e)
{
gcSpreadGrid1.Rows.Remove(gcSpreadGrid1.ActiveRowIndex);
}
回避方法
Service Pack 3(v1.0.2016.1207)で修正済みです。
Service Pack 3(v1.0.2016.1207)より前のバージョンでは次の回避方法が有効です。
------------------------------------------
行や列を削除する前にアクティブセルをいったんクリアします。
◎サンプルコード(VB)
◎サンプルコード(C#)
Service Pack 3(v1.0.2016.1207)より前のバージョンでは次の回避方法が有効です。
------------------------------------------
行や列を削除する前にアクティブセルをいったんクリアします。
◎サンプルコード(VB)
Private Sub RemoveButton_Click(sender As Object, e As RoutedEventArgs) Handles RemoveButton.Click
Dim cp As CellPosition = GcSpreadGrid1.ActiveCellPosition
GcSpreadGrid1.ActiveCellPosition = CellPosition.Empty
GcSpreadGrid1.Rows.Remove(cp.Row)
gcSpreadGrid1.ActiveCellPosition = cp
End Sub
◎サンプルコード(C#)
private void RemoveButton_Click(object sender, RoutedEventArgs e)
{
CellPosition cp = gcSpreadGrid1.ActiveCellPosition;
gcSpreadGrid1.ActiveCellPosition = CellPosition.Empty;
gcSpreadGrid1.Rows.Remove(cp.Row);
gcSpreadGrid1.ActiveCellPosition = cp;
}