[GcSpreadGrid] AutoFitColumns/AutoFitRowsメソッドが動作しない場合の対処方法

文書番号 : 85094     文書種別 : 使用方法     登録日 : 2020/05/21     最終更新日 : 2020/05/21
文書を印刷する
対象製品
SPREAD for WPF 3.0J
詳細
AutoFitColumns/AutoFitRowsメソッドを使用した列の幅や行の高さの自動調整が、実行のタイミングによって動作しない場合があります。これは、列や行が完全に生成、表示されていないタイミングで自動調整を実行しているために、動作していないことが考えられます。以下は、その例と対処方法です。

【例】
  1. データ連結の処理を実行後に、続けてAutoFitColumns/AutoFitRowsメソッド実行した場合
  2. コントロールのスクロール時(ScrollChangedイベント)にAutoFitColumns/AutoFitRowsメソッド実行した場合

【対処方法】
  1. 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();
    }

  2. 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();
    }
関連情報