作成日: 2018/12/12 最終更新日: 2019/02/07
文書種別
不具合
状況
修正済み
詳細
通常、フィルタウィンドウにおいて、すべてのチェックボックスを外した状態では「OK」ボタンは無効となりますが、特定の操作を行った場合に「OK」ボタンが無効にならない場合があります。
例:A列に「aaa」「bbb」「ccc」というデータがある場合
例:A列に「aaa」「bbb」「ccc」というデータがある場合
- A列のフィルタを開き、「aaa」のチェックを外し、「OK」ボタンを押します。
- フィルタリング後のセルの値をすべて削除します("bbb", "ccc"をDeleteキーで削除します)。
- 再度、A列のフィルタを開きます。
- 「OK」ボタンが無効な状態になりません。また、この状態でさらに「OK」ボタンを押すと、すべての行が表示されます。
回避方法
Service Pack 2(v2.0.2019.0207)で修正済みです。
Service Pack 2(v2.0.2019.0207)より前のバージョンでは次の回避方法が有効です。
------------------------------------------
チェック状態を判定して、OKボタンのEnabledステータスを更新します。
◎サンプルコード(C#)
Service Pack 2(v2.0.2019.0207)より前のバージョンでは次の回避方法が有効です。
------------------------------------------
チェック状態を判定して、OKボタンのEnabledステータスを更新します。
◎サンプルコード(C#)
using GrapeCity.Windows.SpreadGrid.Presenters;
using System.Reflection;
public MainWindow()
{
InitializeComponent();
gcSpreadGrid1.CanUserFilterColumns = true;
gcSpreadGrid1.RowCount = 3;
gcSpreadGrid1[0, 0].Text = "aaa";
gcSpreadGrid1[1, 0].Text = "bbb";
gcSpreadGrid1[2, 0].Text = "ccc";
BeginForceOkButtonRefresh();
}
private void BeginForceOkButtonRefresh()
{
EventManager.RegisterClassHandler(typeof(FilterContextMenu), ContextMenu.OpenedEvent, new RoutedEventHandler(ContextMenu_Open), true);
}
private void ContextMenu_Open(object sender, RoutedEventArgs e)
{
var menu = sender as FilterContextMenu;
if (menu == null)
{
return;
}
var filterEditor = FirstDescentOrSelfOfType(menu);
if (filterEditor == null)
{
return;
}
var fields = typeof(AutoFilterEditor2).GetRuntimeFields().ToArray();
var oKButton = fields.Where(fld => fld.FieldType == typeof(Button) && ((Button)fld.GetValue(filterEditor)).Name == "OKButton").Single().GetValue(filterEditor) as Button;
var candidateItems = fields.Where(fld => fld.FieldType == typeof(IEnumerable)).Single().GetValue(filterEditor) as IEnumerable;
if (oKButton == null)
{
return;
}
oKButton.IsEnabled = (from itm in candidateItems where itm.IsChecked.GetValueOrDefault() select itm).Any();
}
private static T FirstDescentOrSelfOfType(DependencyObject element) where T : DependencyObject
{
if (element == null)
{
return null;
}
var items = new Stack();
items.Push(element);
while (items.Count > 0)
{
var current = items.Pop();
if (current is T)
{
return (T)current;
}
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(current); i++)
{
items.Push(VisualTreeHelper.GetChild(current, i));
}
}
return null;
}
private static T AncestorOfType(DependencyObject element) where T : DependencyObject
{
if (element == null)
{
return null;
}
DependencyObject parent = element;
do
{
parent = VisualTreeHelper.GetParent(parent);
T candidate = parent as T;
if (candidate != null)
{
return candidate;
}
} while (parent != null);
return null;
}
旧文書番号
83464