# Incremental Search

## Content



With True DBGrid, you can easily perform search either on the whole grid or just a specific column. Incremental search for a column in the grid, positions a grid to that row if a match is found. The incremental searching feature specifically uses the grid's KeyPress event and the grid's indexer to retrieve and compare data for the particular column.

Let's say the user wants to search for entries in a column using incremental search, for this purpose, the user can add a Timer component to the form, and then set the **KeyPress** and **Tick** events.

Complete the following steps:

1.  Add a **Timer** component from the Visual Studio Toolbox to the form.<br />
2.  Set the Timer's **Interval** property to 1 second.
    
    **In the Designer**
    
    Locate the **Interval** property for Timer1 in the **Properties** window and set it to **1000**.
    
    **In Code**
    
    Add the following code to the **Form\_Load** event:
    
    ```csharp
    this.timer1.Interval = 1000;
    ```
    
3.  Add the **KeyPress** event:
    
    ```csharp
    private void c1TrueDBGrid1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
            {
                // we're handling the keystroke
                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;
                // we'll stop if we get back to our starting position
                while( current != start )
                {
                    // get the value
                    string s = this.c1TrueDBGrid1[current, this.c1TrueDBGrid1.Col].ToString();
                    // if we find a match, we're done
                    if(!string.IsNullOrEmpty(s) && s.Length >= _searchString.Length && s.Substring(0, _searchString.Length).ToUpper() == _searchString.ToUpper() )
                        break;
                    // search the next row, wrap if we need too
                    current = (current + 1) % count;
                }
                // update the grid's current row
                this.c1TrueDBGrid1.Row = current;
                // clears the search string
                this.timer1.Enabled = true;
            }
    ```
    
4.  Add the **Tick** event for the timer:
    
    ```csharp
    private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
            {
                this._searchString = string.Empty;
                this.timer1.Enabled = false;
            }
    ```
    

As the user types, the search will highlight the cell containing that letter. If more than one entry begins with the same letter, typing the next letter will highlight the entry with those letters.

![](https://cdn.mescius.io/document-site-files/images/a1b176e5-6638-4b1f-a786-e41a817558bb/images/incremental-refresh-gif.gif)


> type=note
> **Note**: After 1 second, the search string will reset.