Copyright © GrapeCity inc. All rights reserved.
True DBGrid for WinForms
列内のエントリを検索する
タスク別ヘルプ > 列に関するタスク > 列内のエントリを検索する

インクリメンタルサーチを使用して列のエントリを検索するには、Timer コンポーネントをフォームに追加し、KeyPressおよびTickイベントを設定します。

  1. Timerコンポーネントをツールボックスからフォームに追加します。
  2. TimerのIntervalプロパティを 1 秒に設定します。

    デザイナの場合

    プロパティウィンドウで Timer1のInterval プロパティを見つけ、これを 1000 に設定します。

    コードの場合

    Form_Loadイベントに次のコードを追加します。

    Visual Basic コードの書き方

    Visual Basic
    コードのコピー
    Me.Timer1.Interval = 1000
    

    C#コードの書き方

    C#
    コードのコピー
    this.timer1.Interval = 1000;
    
  3. フォームレベルで検索文字列の変数を宣言します。

    Visual Basic コードの書き方

    Visual Basic
    コードのコピー
    Dim searchString As String = String.Empty
    

    C#コードの書き方

    C#
    コードのコピー
    string searchString = string.Empty;
    
  4. KeyPressイベントを追加します。

    Visual Basic コードの書き方

    Visual Basic
    コードのコピー
    Private Sub C1TrueDBGrid1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles C1TrueDBGrid1.KeyPress
     
        ' キーストロークを処理します。
        e.Handled = True
     
        Me.searchString += e.KeyChar
        Dim count As Integer = Me.C1TrueDBGrid1.Splits(0).Rows.Count
        Dim start As Integer = Me.C1TrueDBGrid1.Row
        Dim current As Integer = (start + 1) Mod count
     
        ' 検索が開始位置に戻ったら停止します。
        While current <> start
     
            ' 値を取得します。
            Dim s As String = Me.C1TrueDBGrid1(current, Me.C1TrueDBGrid1.Col).ToString()
     
            ' 一致が見つかったら、終了します。
            If s.Substring(0, Me.searchString.Length).ToUpper() = Me.searchString.ToUpper() Then
                Exit While
            End If 
     
            ' 次の行を検索し、必要に応じて列を折り返します。
            current = (current + 1) Mod count
        End While
     
        'グリッドの現在行を更新します。
        Me.C1TrueDBGrid1.Row = current
     
        ' エントリを強調表示します。
        Me.C1TrueDBGrid1.MarqueeStyle = C1.Win.C1TrueDBGrid.MarqueeEnum.HighlightCell
     
        ' 検索文字列を 1 秒でクリアします。
        Me.Timer1.Enabled = True
    End Sub
    

    C#コードの書き方

    C#
    コードのコピー
    private void c1TrueDBGrid1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
    {
        // キーストロークを処理します。
        e.Handled = true;
     
        this.searchString += e.KeyChar;
        int count = this.c1TrueDBGrid1.Splits[0].Rows.Count;
        int start = this.c1TrueDBGrid1.Row;
        int current = (start + 1) % count;
     
        //検索が開始位置に戻ったら停止します。
        while( current != start )
        {
            // 値を取得します。
            string s = this.c1TrueDBGrid1[current, this.c1TrueDBGrid1.Col].ToString();
     
            // 一致が見つかったら、終了します。
            if( s.Substring(0, this.searchString.Length).ToUpper() == this.searchString.ToUpper() )
                break;
     
            // 次の行を検索し、必要に応じて列を折り返します。
            current = (current + 1) % count;
        }
     
        // グリッドの現在行を更新します。
        this.c1TrueDBGrid1.Row = current;
     
        // エントリを強調表示します。
        this.c1TrueDBGrid1.MarqueeStyle = C1.Win.C1TrueDBGrid.MarqueeEnum.HighlightCell;
     
        // 検索文字列を 1 秒でクリアします。
        this.timer1.Enabled = true;
    }
    
  5. タイマーに Tickイベントを追加します。

    Visual Basic コードの書き方

    Visual Basic
    コードのコピー
    Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Me.searchString = String.Empty
        Me.Timer1.Enabled = False
    End Sub
    

    C# コードの書き方

    C#
    コードのコピー
    private void timer1_Tick(object sender, System.EventArgs e)
    {
        this.searchString = string.Empty;
        this.timer1.Enabled = false;
    }
    

このトピックの作業結果

ユーザーが入力を行うと、その文字を含むセルが検索されて強調表示されます。この例では、Last 列で「V」を入力すると、「Varese」が強調表示されます。

同じ文字で始まるエントリが複数ある場合は、次の文字を入力すると、それらの文字を含むエントリが強調表示されます。たとえば、Last 列で「Viv」を入力すると、「Vivaldi」が強調表示されます。


注意:1 秒後に、検索文字列はリセットされます。