Как сделать поиск по DataGridView?

Результат поиска: выделяет ячейку, в которой находится искомый текст.
code: #csharp
  1. private void searchDownBtn_Click( object sender, EventArgs e )
  2.         {
  3.             if (!newFind)
  4.             {
  5.                 dataGridView.Rows[lastFindRow].Cells[lastFindCell].Style.BackColor = oldBackColor;
  6.                 dataGridView.Rows[lastFindRow].Cells[lastFindCell].Style.SelectionBackColor = oldBackColor;
  7.                 dataGridView.Rows[lastFindRow].Cells[lastFindCell].Style.ForeColor = oldForeColor;
  8.                 dataGridView.Rows[lastFindRow].Cells[lastFindCell].Style.SelectionForeColor = oldForeColor;
  9.             }
  10.             if (searchTextBox.Text != null && searchTextBox.Text != String.Empty)
  11.             {
  12.                 bool finded = false;
  13.                 int n = lastFindRow;
  14.                 lastFindCell++;
  15.                 for (int i = lastFindRow; i < dataGridView.Rows.Count; i++)
  16.                 {
  17.                     if (dataGridView.Rows[i].Visible)
  18.                     {
  19.                         if (i != lastFindRow)
  20.                             lastFindCell = 0;
  21.                         finded = false;
  22.                         for (int k = lastFindCell; k < dataGridView.Rows[i].Cells.Count; k++)
  23.                         {
  24.                             if (dataGridView.Rows[i].Cells[k].Value != null && dataGridView.Rows[i].Cells[k].Visible)
  25.                             {
  26.                                 if (dataGridView.Rows[i].Cells[k].Value.ToString().IndexOf( searchTextBox.Text, StringComparison.OrdinalIgnoreCase ) >= 0)
  27.                                 {
  28.                                     lastFindCell = k;
  29.                                     oldBackColor = dataGridView.Rows[i].Cells[k].Style.BackColor;
  30.                                     oldForeColor = dataGridView.Rows[i].Cells[k].Style.ForeColor;
  31.                                     finded = true;
  32.                                     break;
  33.                                 }
  34.                             }
  35.                         }
  36.                         if (finded)
  37.                         {
  38.                             dataGridView.Rows[i].Cells[lastFindCell].Style.SelectionBackColor = Color.Lime;
  39.                             dataGridView.Rows[i].Cells[lastFindCell].Style.SelectionForeColor = Color.Black;
  40.                             dataGridView.CurrentCell = dataGridView.Rows[i].Cells[lastFindCell];
  41.                             newFind = false;
  42.                             lastFindRow = i;
  43.                             break;
  44.                         }
  45.                         n = i;
  46.                     }
  47.                 }
  48.                 if (!finded)
  49.                 {
  50.                     newFind = true;
  51.                     lastFindRow = 0;
  52.                     lastFindCell = 0;
  53.                     if (n + 1 >= dataGridView.Rows.Count)
  54.                     {
  55.                         if (MessageBox.Show( "Поиск достиг конца таблицы! Начать поиск заново сначала?", "Информация!", MessageBoxButtons.YesNo, MessageBoxIcon.Information ) == DialogResult.Yes)
  56.                         {
  57.                             searchDownBtn.PerformClick();
  58.                         }
  59.                     }
  60.                     else
  61.                         MessageBox.Show( "Искомый текст не найден!", "Информация!", MessageBoxButtons.OK, MessageBoxIcon.Information );
  62.                 }
  63.             }
  64.         }
  65.  
  66.         private void searchUpBtn_Click( object sender, EventArgs e )
  67.         {
  68.             if (!newFind)
  69.             {
  70.                 dataGridView.Rows[lastFindRow].Cells[lastFindCell].Style.BackColor = oldBackColor;
  71.                 dataGridView.Rows[lastFindRow].Cells[lastFindCell].Style.SelectionBackColor = oldBackColor;
  72.                 dataGridView.Rows[lastFindRow].Cells[lastFindCell].Style.ForeColor = oldForeColor;
  73.                 dataGridView.Rows[lastFindRow].Cells[lastFindCell].Style.SelectionForeColor = oldForeColor;
  74.             }
  75.             if (searchTextBox.Text != null && searchTextBox.Text != String.Empty)
  76.             {
  77.                 bool finded = false;
  78.                 int n = lastFindRow;
  79.                 lastFindCell--;
  80.                 for (int i = lastFindRow; i >= 0; i--)
  81.                 {
  82.                     if (dataGridView.Rows[i].Visible)
  83.                     {
  84.                         if (i != lastFindRow)
  85.                             lastFindCell = dataGridView.Rows[i].Cells.Count - 1;
  86.                         finded = false;
  87.                         for (int k = lastFindCell; k >= 0; k--)
  88.                         {
  89.                             if (dataGridView.Rows[i].Cells[k].Value != null && dataGridView.Rows[i].Cells[k].Visible)
  90.                             {
  91.                                 if (dataGridView.Rows[i].Cells[k].Value.ToString().IndexOf( searchTextBox.Text, StringComparison.OrdinalIgnoreCase ) >= 0)
  92.                                 {
  93.                                     lastFindCell = k;
  94.                                     oldBackColor = dataGridView.Rows[i].Cells[k].Style.BackColor;
  95.                                     oldForeColor = dataGridView.Rows[i].Cells[k].Style.ForeColor;
  96.                                     finded = true;
  97.                                     break;
  98.                                 }
  99.                             }
  100.                         }
  101.                         if (finded)
  102.                         {
  103.                             dataGridView.Rows[i].Cells[lastFindCell].Style.SelectionBackColor = Color.Lime;
  104.                             dataGridView.Rows[i].Cells[lastFindCell].Style.SelectionForeColor = Color.Black;
  105.                             dataGridView.CurrentCell = dataGridView.Rows[i].Cells[lastFindCell];
  106.                             newFind = false;
  107.                             lastFindRow = i;
  108.                             break;
  109.                         }
  110.                         n = i;
  111.                     }
  112.                 }
  113.                 if (!finded)
  114.                 {
  115.                     newFind = true;
  116.                     lastFindRow = dataGridView.Rows.Count - 1;
  117.                     if (dataGridView.Rows.Count > 0)
  118.                         lastFindCell = dataGridView.Rows[0].Cells.Count - 1;
  119.  
  120.                     if (n <= 0)
  121.                     {
  122.                         if (MessageBox.Show( "Поиск достиг начала таблицы! Начать поиск заново с конца?", "Информация!", MessageBoxButtons.YesNo, MessageBoxIcon.Information ) == DialogResult.Yes)
  123.                         {
  124.                             searchUpBtn.PerformClick();
  125.                         }
  126.                     }
  127.                     else
  128.                         MessageBox.Show( "Искомый текст не найден!", "Информация!", MessageBoxButtons.OK, MessageBoxIcon.Information );
  129.                 }
  130.             }
  131.         }
Поделиться:

Похожие статьи: