ComponentOne True DBGrid for WinForms
True DBGrid for WinForms Task-Based Help / Searching for Entries in a Column
In This Topic
    Searching for Entries in a Column
    In This Topic

    To search for entries in a column using an incremental search, add a Timer component to the form, then set the KeyPress and Tick events.

    Complete the following steps:

    1. Add a Timer component from the Visual Studio Toolbox to the form.
    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:

      To write code in Visual Basic

      Visual Basic
      Copy Code
      Me.Timer1.Interval = 1000
      

      To write code in C#

      C#
      Copy Code
      this.timer1.Interval = 1000;
      
    3. Declare the search string variable at the form level:

      To write code in Visual Basic

      Visual Basic
      Copy Code
      Dim searchString As String = String.Empty
      

      To write code in C#

      C#
      Copy Code
      string searchString = string.Empty;
      
    4. Add the KeyPress event:

      To write code in Visual Basic

      Visual Basic
      Copy Code
      Private Sub C1TrueDBGrid1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles C1TrueDBGrid1.KeyPress
       
          ' Handle the keystroke.
          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
       
          ' Stop if search returns to the starting position.
          While current <> start
       
              ' Get the value.
              Dim s As String = Me.C1TrueDBGrid1(current, Me.C1TrueDBGrid1.Col).ToString()
       
              ' If a match is found, exit.
              If s.Substring(0, Me.searchString.Length).ToUpper() = Me.searchString.ToUpper() Then
                  Exit While
              End If 
       
              ' Search the next row, wrapping the column if needed.
              current = (current + 1) Mod count
          End While
       
          ' Update the grid's current row.
          Me.C1TrueDBGrid1.Row = current
       
          ' Highlight the entry.
          Me.C1TrueDBGrid1.MarqueeStyle = C1.Win.C1TrueDBGrid.MarqueeEnum.HighlightCell
       
          ' Clear the search string at 1 second.
          Me.Timer1.Enabled = True
      End Sub
      

      To write code in C#

      C#
      Copy Code
      private void c1TrueDBGrid1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
      {
          // Handle 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;
       
          // Stop if search returns to the starting position.
          while( current != start )
          {
              // Get the value.
              string s = this.c1TrueDBGrid1[current, this.c1TrueDBGrid1.Col].ToString();
       
              // If a match is found, exit.
              if( s.Substring(0, this.searchString.Length).ToUpper() == this.searchString.ToUpper() )
                  break;
       
              // Search the next row, wrapping the column if needed.
              current = (current + 1) % count;
          }
       
          // Update the grid's current row.
          this.c1TrueDBGrid1.Row = current;
       
          // Highlight the entry.
          this.c1TrueDBGrid1.MarqueeStyle = C1.Win.C1TrueDBGrid.MarqueeEnum.HighlightCell;
       
          // Clear the search string at 1 second.
          this.timer1.Enabled = true;
      }
      
    5. Add the Tick event for the timer:

      To write code in Visual Basic

      Visual Basic
      Copy Code
      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
      

      To write code in C#

      C#
      Copy Code
      private void timer1_Tick(object sender, System.EventArgs e)
      {
          this.searchString = string.Empty;
          this.timer1.Enabled = false;
      }
      

    What You've Accomplished

    As the user types, the search will highlight the cell containing that letter. In this example, tying V in the Last column highlights "Varese".

    If more than one entry begins with the same letter, typing the next letter will highlight the entry with those letters. For example, typing Viv in the Last column will highlight "Vivaldi":


    Note: After 1 second, the search string will reset.