[GcSpreadGrid] AutoFitColumns/AutoFitRowsメソッドが動作しない場合の対処方法
対象製品
SPREAD for WPF 3.0J
詳細
AutoFitColumns/AutoFitRowsメソッドを使用した列の幅や行の高さの自動調整が、実行のタイミングによって動作しない場合があります。これは、列や行が完全に生成、表示されていないタイミングで自動調整を実行しているために、動作していないことが考えられます。以下は、その例と対処方法です。
【例】
【対処方法】
【例】
- データ連結の処理を実行後に、続けてAutoFitColumns/AutoFitRowsメソッド実行した場合
- コントロールのスクロール時(ScrollChangedイベント)にAutoFitColumns/AutoFitRowsメソッド実行した場合
【対処方法】
- BeginInvokeメソッドを使用して自動調整を実行する
◎サンプルコード(C#)
private void Window_Loaded(object sender, RoutedEventArgs e) { gcSpreadGrid1.ItemsSource = dataTable.DefaultView; //gcSpreadGrid1.AutoFitColumns(); System.Windows.Threading.Dispatcher.CurrentDispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.ApplicationIdle, new Action(AutoFit)); } public void AutoFit() { gcSpreadGrid1.AutoFitColumns(); }
- DispatcherTimerのTickイベントを利用して、自動調整を実行するタイミングをずらす
◎サンプルコード(C#)
private readonly DispatcherTimer _autoFitTimer = new DispatcherTimer { Interval = TimeSpan.FromMilliseconds(200) }; public MainWindow() { InitializeComponent(); _autoFitTimer.Tick += AutoFitTimer_Tick; } private void AutoFitTimer_Tick(object sender, EventArgs e) { GcSpread1.AutoFitColumns(); GcSpread1.AutoFitRows(); _autoFitTimer.Stop(); } private void GcSpread1_ScrollChanged(object sender, GrapeCity.Windows.SpreadGrid.SpreadScrollChangedEventArgs e) { _autoFitTimer.Stop(); _autoFitTimer.Start(); }