作成日: 2025/06/03 最終更新日: 2025/06/03
文書種別
不具合
発生環境
4.0J
状況
回避方法あり
詳細
GcSpreadGridでシート内の文字列を検索するため検索ダイアログを起動します。セルに検索対象の文字列がある場合であっても、検索ダイアログに文字列を入力した後にEnterキーを押しても検索対象がヒットしません。なお、検索ダイアログに文字列を入力した後に[次へ検索]ボタンを押下した場合に本現象は発生しません。
回避方法
検索ダイアログのインスタンスを取得して既存のダイアログの動作を変更する方法が考えられます。
参考情報:製品ヘルプ SearchDialog プロパティ
製品サンプル(GcSpreadGridデモ > セル > 検索ダイアログ)の場合、uCellSearchDialog.xaml.csを以下のように実装することで回避が可能となります。
■サンプルコード(C#)
using GrapeCity.Windows.SpreadGrid;
using System;
using System.Runtime.CompilerServices;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
namespace GrapeCity.WPF.Spread.Sample.GcSpreadGrid
{
///
/// uCellSearchDialog.xaml の相互作用ロジック
///
public partial class uCellSearchDialog : UserControl
{
public uCellSearchDialog()
{
InitializeComponent();
// データを連結
gcSpreadGrid1.ColumnCount = 7;
gcSpreadGrid1.Columns[0].DataField = new PropertyDataField() { Property = "ProductCode" };
gcSpreadGrid1.Columns[1].DataField = new PropertyDataField() { Property = "ProductName" };
gcSpreadGrid1.Columns[2].DataField = new PropertyDataField() { Property = "StockDate" };
gcSpreadGrid1.Columns[3].DataField = new PropertyDataField() { Property = "Quantity" };
gcSpreadGrid1.Columns[4].DataField = new PropertyDataField() { Property = "UnitPrice" };
gcSpreadGrid1.Columns[5].DataField = new PropertyDataField() { Property = "Term" };
gcSpreadGrid1.Columns[6].DataField = new PropertyDataField() { Property = "Section" };
// 列幅を設定
gcSpreadGrid1.Columns[0].Width = 90;
gcSpreadGrid1.Columns[1].Width = 100;
gcSpreadGrid1.Columns[2].Width = 90;
gcSpreadGrid1.Columns[3].Width = 60;
gcSpreadGrid1.Columns[4].Width = 60;
gcSpreadGrid1.Columns[5].Width = 60;
gcSpreadGrid1.Columns[6].Width = 60;
SearchDialog = gcSpreadGrid1.SearchDialog;
}
private Window _SearchDialog;
private Window SearchDialog
{
get
{
return _SearchDialog;
}
[MethodImpl(MethodImplOptions.Synchronized)]
set
{
Window SearchDialog = _SearchDialog;
if (SearchDialog != null)
{
SearchDialog.Loaded -= SearchDialog_Loaded;
SearchDialog.Unloaded -= SearchDialog_Unloaded;
}
_SearchDialog = value;
SearchDialog = _SearchDialog;
if (SearchDialog != null)
{
SearchDialog.Loaded += SearchDialog_Loaded;
SearchDialog.Unloaded += SearchDialog_Unloaded;
}
}
}
private void Button1_Click(object sender, RoutedEventArgs e)
{
SearchDialog.Show();
}
private void SearchDialog_Loaded(object sender, RoutedEventArgs e)
{
var dlg = sender as Window;
var txtSearch = dlg.FindName("TxtSearch") as TextBox;
var binding = txtSearch.GetBindingExpression(TextBox.TextProperty).ParentBinding;
binding = new Binding
{
Path = binding.Path,
Mode = binding.Mode,
UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
};
BindingOperations.SetBinding(txtSearch, TextBox.TextProperty, binding);
}
private void SearchDialog_Unloaded(object sender, RoutedEventArgs e)
{
Dispatcher.BeginInvoke(new Action(() =
{
SearchDialog = gcSpreadGrid1.SearchDialog;
}));
}
}
}