[FlexGrid for WinForms] アンバウンドグリッドでAllowAddNewにtrueを設定した場合、Rows.Countの設定値が正しく反映されない

文書番号 : 82111     文書種別 : 既知の問題     登録日 : 2017/04/06     最終更新日 : 2018/09/03
文書を印刷する
対象製品
ComponentOne for WinForms
ステータス
修正済み
詳細
C1FlexgridのRows.Countを設定したのち、その値を参照すると、新規行の分(1行)が追加された値が戻ります。
Rows.Countを設定する場所は、Form_Load内、ボタンクリック時など、どこで設定しても発生します。

※コンストラクタ内でRows.Countを参照すると設定したままの値が返りますが、通常行が存在しないケースではこの場所で設定しても新規行の分(1行)が追加された値が戻ります。

(2018/09/03追記)

本動作の修正に当たって、「Countプロパティに指定された値がFixedプロパティに指定された値以下の場合、新規行を表示するために固定行が減る」(例:1 → 0になる)等の動作変更も行われました。詳細は、回避方法の項をご参照ください。
回避方法
この問題はバージョン4.0.20171.260で修正されました。
 ※ .NET Framework 2.0用アセンブリはメンテナンスモードに移行したため、C1.Win.C1xxxx.2.dllでの修正は行われません。
   .NET Framework 4.0用アセンブリ(C1.Win.C1xxxx.4.dll)をご利用ください。
修正版の適用方法については、アップデートの方法を参照してください。

修正版を適用しない場合の回避方法は、次の通りです。
・いったんAllowAddNewをfalseにしてRows.Countを設定したのち、Rows.Countの値を一つ減らしてからAllowAddNewをtrueに設定しなおします。

◎サンプルコード(VB)
Private Sub Form1_Load(sender As Object, e As EventArgs)
  cfgList.AllowAddNew = False
  cfgList.Rows.Count = 3
End Sub
Private Sub button1_Click(sender As Object, e As EventArgs)
  cfgList.Rows.Count = cfgList.Rows.Count - 1
  cfgList.AllowAddNew = True
End Sub

◎サンプルコード(C#)
private void Form1_Load(object sender, EventArgs e)
{
  cfgList.AllowAddNew = false;
  cfgList.Rows.Count = 3;
}
private void button1_Click(object sender, EventArgs e)
{
  cfgList.Rows.Count = cfgList.Rows.Count - 1;
  cfgList.AllowAddNew = true;
}


(2018/09/03追記)

上記修正により、アンバウンドモードでC1FlexGridBase.AllowAddNewプロパティをTrueにした場合、C1FlexGridBase.Rows.Countプロパティに設定された値は、新規行を含む行数とみなされるようになりました。その結果、表示される通常行(グリッドの行全体から固定行と新規行を引いたもの)が修正前よりも減ります。

(例)
下記設定では、固定行1行、通常行2行、新規行1行の計4行が表示されます。
 C1FlexGrid1.AllowAddNew = True
 C1FlexGrid1.Rows.Count = 4
 C1FlexGrid1.Rows.Fixed = 1
 ※ 修正前は固定行1行、通常行3行、新規行1行の計5行が表示。

なお、同時に以下のような動作変更もなされました。
(1) Countプロパティに指定された値がFixedプロパティに指定された値以下の場合(Count <= Flxed)、新規行を表示するために固定行が減ります。
(2) Countプロパティに0を指定した場合、新規行を表示する領域が確保されないため、例外が発生します。

(1の例)
下記設定では固定行1行と新規行1行(通常行なし)が表示されますが、「C1FlexGrid1.Rows.Count = 1」に変更すると、C1FlexGrid1.Rows.Fixed = 0となり、グリッドから固定行が消えて新規行のみが表示されます。

 C1FlexGrid1.AllowAddNew = True
 C1FlexGrid1.Rows.Count = 2
 C1FlexGrid1.Rows.Fixed = 1
  ↓
 C1FlexGrid1.Rows.Count = 1 ' 変更
 (自動的にC1FlexGrid1.Rows.Fixed = 0に変更されます)

これらの動作を以前と同じにするには、Countプロパティに値を設定する際に、固定行+通常行+新規行の分を考慮した行数を指定する必要があります。