private void DGResult_CellEnter(object sender, DataGridViewCellEventArgs e) { string NumberStr = DGResult.Rows[e.RowIndex].Cells[0].Value.ToString(); if (DG != null) { DG.ScrollTo(NumberStr.ToInt() + 1); } if (SG != null) { SourceGrid.Position p = new SourceGrid.Position(NumberStr.ToInt() + 1, 0); SG.SelectColumnRowCell(p.Row, p.Column, true); } this.Focus(); }
/// <summary> /// Поиск текста по гриду. /// </summary> /// <param name="DGSearch"></param> /// <param name="DGResult"></param> /// <param name="SearchText"></param> /// <param name="FirstRow"></param> /// <param name="CaseSensitivity"></param> /// <param name="OnlySelectedColumns"></param> /// <param name="OnlySelectedRows"></param> /// <param name="OnlySelectedArea"></param> /// <param name="SearchDirection"></param> /// <param name="SearchPart"></param> /// <param name="SelectedRows"></param> /// <param name="SelectedColumns"></param> /// <param name="FindCount"></param> /// <returns></returns> public static bool SerchTextSourceGrid(FBA.GridFBA DGSearch, System.Windows.Forms.DataGridView DGResult, string SearchText, int FirstRow, bool CaseSensitivity, bool OnlySelectedColumns, bool OnlySelectedRows, bool OnlySelectedArea, int SearchDirection, int SearchPart, int[] SelectedRows, int[] SelectedColumns, ref int FindCount) { //SearchPart = 1 - Exact match. //SearchPart = 2 - Starts with text. //SearchPart = 3 - Ends with text. //SearchPart = 4 - Contain text. //SearchDirection = 1 - All. //SearchDirection = 2 - Down. //SearchDirection = 3 - Up. //SearchDirection = 0 if (SearchText.IsNullOrEmpty()) { return(false); } //Чувствительность к регистру. Если true, то регистрозависимый поиск. if (!CaseSensitivity) { SearchText = SearchText.ToLower(); } //Если поиск Ends with text. if (SearchPart == 3) { SearchText = SearchText.Reverse(); } if (DGResult != null) { //Копируем структуру. Только названия полей. DGResult.Columns.Add("Num", "Num"); for (int j = 0; j < DGSearch.Columns.Count; j++) { string ColumnName = DGSearch.Columns[j].PropertyName; string ColumnHeader = DGSearch.Columns[j].PropertyName; DGResult.Columns.Add(ColumnName, ColumnHeader); } } string Value = ""; int CountFind = 0; //Ищем по всему гриду или только вниз. if ((SearchDirection == 1) || (SearchDirection == 2)) { for (int iRow = FirstRow; iRow < DGSearch.Rows.Count; iRow++) { //Если поиск по выделенным строкам if ((OnlySelectedArea) || (OnlySelectedRows)) { if (!SelectedRows.Contains(iRow)) { continue; } } bool FindRow = false; for (int iColumn = 0; iColumn < DGSearch.Columns.Count; iColumn++) { //Если поиск по выделенным колонкам if ((OnlySelectedArea) || (OnlySelectedColumns)) { if (!SelectedColumns.Contains(iColumn)) { continue; } } bool FindCell = false; if (!CaseSensitivity) { Value = DGSearch.Value(iRow, iColumn).ToLower(); } else { Value = DGSearch.Value(iRow, iColumn); } if ((SearchPart == 1) && (Value == SearchText)) { FindCell = true; } if ((SearchPart == 2) && (Value.IndexOf(SearchText, StringComparison.CurrentCulture) == 0)) { FindCell = true; } if ((SearchPart == 3) && (Value.Reverse().IndexOf(SearchText, StringComparison.CurrentCulture) == 0)) { FindCell = true; } if ((SearchPart == 4) && (Value.IndexOf(SearchText, StringComparison.CurrentCulture) > -1)) { FindCell = true; } if (!FindCell) { continue; } CountFind++; if (CountFind == 1) { DGSearch.SelectColumnRowCell(iRow, iColumn, true); //В sysData. } FindRow = true; FindCount++; } //Если нашли строку: if (FindRow) { var rowstr = new string[DGSearch.Columns.Count + 1]; rowstr[0] = (iRow - 1).ToString(); for (int N = 0; N < DGSearch.Columns.Count; N++) { rowstr[N + 1] = DGSearch.Value(iRow, N); } if (DGResult != null) { DGResult.Rows.Add(rowstr); } //Если ищем только до первой найденной строки, то выходим. Direction Search = Down. if (SearchDirection == 2) { return(true); } } } } if (SearchDirection == 3) { for (int iRow = DGSearch.Rows.Count - 1; iRow >= 0; iRow--) { //Если поиск по выделенным строкам if ((OnlySelectedArea) || (OnlySelectedRows)) { if (!SelectedRows.Contains(iRow)) { continue; } } bool FindRow = false; for (int iColumn = 0; iColumn < DGSearch.Columns.Count; iColumn++) { //Если поиск по выделенным колонкам if ((OnlySelectedArea) || (OnlySelectedColumns)) { if (!SelectedColumns.Contains(iColumn)) { continue; } } bool FindCell = false; if (!CaseSensitivity) { Value = DGSearch.Value(iRow, iColumn).ToLower(); } else { Value = DGSearch.Value(iRow, iColumn); } if ((SearchPart == 1) && (Value == SearchText)) { FindCell = true; } if ((SearchPart == 2) && (Value.IndexOf(SearchText, StringComparison.CurrentCulture) == 0)) { FindCell = true; } if ((SearchPart == 3) && (Value.Reverse().IndexOf(SearchText, StringComparison.CurrentCulture) == 0)) { FindCell = true; } if ((SearchPart == 4) && (Value.IndexOf(SearchText, StringComparison.CurrentCulture) > -1)) { FindCell = true; } if (!FindCell) { continue; } CountFind++; if (CountFind == 1) { DGSearch.SelectColumnRowCell(iRow, iColumn, true); //В sysData. } FindRow = true; FindCount++; } //Если нашли строку: if (FindRow) { var rowstr = new string[DGSearch.Columns.Count + 1]; rowstr[0] = (iRow - 1).ToString(); for (int N = 0; N < DGSearch.Columns.Count; N++) { rowstr[N + 1] = DGSearch.Value(iRow, N); } DGResult.Rows.Add(rowstr); //Если ищем только до первой найденной строки, то выходим. Direction Search = Up. return(true); } } } return(FindCount > 0); }