【連結】 データ連結時に行の挿入を行うと、新規の行ではなくカレント行の書式がコピーされた行が挿入される

文書番号 : 37554     文書種別 : 不具合     登録日 : 2014/09/30     最終更新日 : 2015/03/31
文書を印刷する
対象製品
SPREAD for ASP.NET 7.0J
状況
修正済み
詳細
データ連結時に行の挿入を行うと、新規の行ではなくカレント行の書式がコピーされた行が挿入されます。

【再現コード】
  Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If IsPostBack Then Return

    ' SPREADの初期設定
    FpSpread1.ActiveSheetView.AllowDelete = True
    FpSpread1.ActiveSheetView.AllowInsert = True
    FpSpread1.ActiveSheetView.Rows(2).Locked = True
    FpSpread1.ActiveSheetView.LockBackColor = System.Drawing.Color.LavenderBlush

    ' データ連結
    Dim tbl As New Data.DataTable()
    tbl.Columns.Add("A", Type.[GetType]("System.String"))
    tbl.Columns.Add("B", Type.[GetType]("System.String"))
    tbl.Columns.Add("C", Type.[GetType]("System.String"))

    For i As Integer = 0 To 2
      Dim row As Data.DataRow = tbl.NewRow()
      row("A") = "B1"
      row("B") = "B2"
      row("C") = "B3"
      tbl.Rows.Add(row)
    Next

    FpSpread1.DataSource = tbl
    FpSpread1.DataBind()
  End Sub

【再現手順】
1.プロジェクトを起動します
2.3行目を選択しコマンドバーを使い行を挿入します
3.追加された空の行をダブルクリックします
 -- 編集を開始できません(選択行の書式がコピーされています)
回避方法
Service Pack 3(v7.0.4017.2010)で修正済み。
Service Pack 3(v7.0.4017.2010)より前のバージョンでは次の回避方法が有効です。
------------------------------------------

クライアントスクリプトを用いて行の挿入を行い、スタイルを再設定します。

------------------------------------
Webフォームクラス
------------------------------------
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  If IsPostBack Then Return

  ' SPREADの初期設定
  FpSpread1.AllowClientUnlock = True
  FpSpread1.ActiveSheetView.AllowDelete = True
  FpSpread1.ActiveSheetView.AllowInsert = True
  FpSpread1.ActiveSheetView.Rows(2).Locked = True
  FpSpread1.ActiveSheetView.LockBackColor = System.Drawing.Color.LavenderBlush

  ' データ連結
  Dim tbl As New Data.DataTable()
  tbl.Columns.Add("A", Type.[GetType]("System.String"))
  tbl.Columns.Add("B", Type.[GetType]("System.String"))
  tbl.Columns.Add("C", Type.[GetType]("System.String"))

  For i As Integer = 0 To 2
    Dim row As Data.DataRow = tbl.NewRow()
    row("A") = "B1"
    row("B") = "B2"
    row("C") = "B3"
    tbl.Rows.Add(row)
  Next

  FpSpread1.DataSource = tbl
  FpSpread1.DataBind()
End Sub

Protected Overrides Sub Render(writer As System.Web.UI.HtmlTextWriter)
  Dim con As Control = FpSpread1.FindControl("Insert")
  TryCast(con, Image).Attributes("onclick") = "test();"
  MyBase.Render(writer)
End Sub

------------------------------------
クライアント側スクリプト
------------------------------------
function test() {
  var spread = document.getElementById("FpSpread1");
  var row = spread.GetActiveRow();
  var cols = spread.GetColCount();
  spread.Insert();
  for (var i = 0; i < cols; i++) {
    spread.Cells(row, i).SetBackColor("white");
    spread.Cells(row, i).SetForeColor("black");
    spread.Cells(row, i).SetLocked(false);
  }
}