Пример #1
0
        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();
        }
Пример #2
0
        /// <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);
        }