作成日: 2018/12/14 最終更新日: 2018/12/18
文書種別
不具合
状況
修正済み
詳細
■事象
標準型セルを継承したカスタムセル型を使用した時、フィルタリングが正しく動作しない場合があります。
■サンプルコード(C#)
【再現手順】
1. 上記処理を実装したアプリケーションを実行します。
2. 2列目でフィルタリングします(例:"A"でフィルタリング)
→何もフィルタリングされません。
■備考
この問題は、フィルタリング形式(AutoFilterModeプロパティ)を拡張フィルタリング形式(EnhancedContextMenu)かフィルタバー形式(FilterBar)に設定している時に発生します。
通常形式(FilterGadget)の場合、発生しません。
標準型セルを継承したカスタムセル型を使用した時、フィルタリングが正しく動作しない場合があります。
■サンプルコード(C#)
private void Form1_Load(object sender, EventArgs e)
{
// サンプル用データを作成します。
DataTable dt = new DataTable("Test");
dt.Columns.Add("Int32", typeof(Int32));
dt.Columns.Add("String", typeof(String));
for (var i = 0; i < 5; i++)
{
dt.Rows.Add(i % 3, Convert.ToString(i % 3));
}
dt.Rows.Add(dt.NewRow());
dt.AcceptChanges();
// SPREADにデータを設定します。
fpSpread1.ActiveSheet.DataAutoCellTypes = false;
fpSpread1.ActiveSheet.DataSource = dt;
// フィルタリングを有効にします。
fpSpread1.ActiveSheet.AutoFilterMode = FarPoint.Win.Spread.AutoFilterMode.EnhancedContextMenu;
fpSpread1.ActiveSheet.Columns[0, 1].AllowAutoFilter = true;
// カスタムセル型を設定します。
var customCell = new CustomGeneralCellType();
customCell.Multiline = true;
fpSpread1.ActiveSheet.Columns[0, 1].CellType = customCell;
}
// 標準型セルを継承したカスタムセル型の定義
public class CustomGeneralCellType : FarPoint.Win.Spread.CellType.GeneralCellType
{
public override string Format(object obj)
{
// 文字列変換用のリストを作成します。
List values = new List() { 0, 1, 2 };
List texts = new List() { "A", "B", "C" };
// 変換リストに従って、元データを表示用のテキストデータに変換します。
int index = values.IndexOf(Convert.ToInt32(obj));
if (index > -1)
{
return texts[index];
}
else
{
return string.Empty;
}
}
}
{
// サンプル用データを作成します。
DataTable dt = new DataTable("Test");
dt.Columns.Add("Int32", typeof(Int32));
dt.Columns.Add("String", typeof(String));
for (var i = 0; i < 5; i++)
{
dt.Rows.Add(i % 3, Convert.ToString(i % 3));
}
dt.Rows.Add(dt.NewRow());
dt.AcceptChanges();
// SPREADにデータを設定します。
fpSpread1.ActiveSheet.DataAutoCellTypes = false;
fpSpread1.ActiveSheet.DataSource = dt;
// フィルタリングを有効にします。
fpSpread1.ActiveSheet.AutoFilterMode = FarPoint.Win.Spread.AutoFilterMode.EnhancedContextMenu;
fpSpread1.ActiveSheet.Columns[0, 1].AllowAutoFilter = true;
// カスタムセル型を設定します。
var customCell = new CustomGeneralCellType();
customCell.Multiline = true;
fpSpread1.ActiveSheet.Columns[0, 1].CellType = customCell;
}
// 標準型セルを継承したカスタムセル型の定義
public class CustomGeneralCellType : FarPoint.Win.Spread.CellType.GeneralCellType
{
public override string Format(object obj)
{
// 文字列変換用のリストを作成します。
List
List
// 変換リストに従って、元データを表示用のテキストデータに変換します。
int index = values.IndexOf(Convert.ToInt32(obj));
if (index > -1)
{
return texts[index];
}
else
{
return string.Empty;
}
}
}
【再現手順】
1. 上記処理を実装したアプリケーションを実行します。
2. 2列目でフィルタリングします(例:"A"でフィルタリング)
→何もフィルタリングされません。
■備考
この問題は、フィルタリング形式(AutoFilterModeプロパティ)を拡張フィルタリング形式(EnhancedContextMenu)かフィルタバー形式(FilterBar)に設定している時に発生します。
通常形式(FilterGadget)の場合、発生しません。
回避方法
Service Pack 2(v11.0.4503.2012)で修正済み。
Service Pack 2を適用せずに対処する方法としては、標準型セルを継承してカスタムセル型を作成するのではなく、テキスト型セル(TextCellType)か編集可能型セルのベースクラス(EditBaseCellType)を継承する方法が有効です。
Service Pack 2を適用せずに対処する方法としては、標準型セルを継承してカスタムセル型を作成するのではなく、テキスト型セル(TextCellType)か編集可能型セルのベースクラス(EditBaseCellType)を継承する方法が有効です。
旧文書番号
83466