public DataGridViewColumn GetLastColumn(DataGridViewElementStates includeFilter, DataGridViewElementStates excludeFilter)
 {
     if ((includeFilter & ~(DataGridViewElementStates.Visible | DataGridViewElementStates.Selected | DataGridViewElementStates.Resizable | DataGridViewElementStates.ReadOnly | DataGridViewElementStates.Frozen | DataGridViewElementStates.Displayed)) != DataGridViewElementStates.None)
     {
         throw new ArgumentException(System.Windows.Forms.SR.GetString("DataGridView_InvalidDataGridViewElementStateCombination", new object[] { "includeFilter" }));
     }
     if ((excludeFilter & ~(DataGridViewElementStates.Visible | DataGridViewElementStates.Selected | DataGridViewElementStates.Resizable | DataGridViewElementStates.ReadOnly | DataGridViewElementStates.Frozen | DataGridViewElementStates.Displayed)) != DataGridViewElementStates.None)
     {
         throw new ArgumentException(System.Windows.Forms.SR.GetString("DataGridView_InvalidDataGridViewElementStateCombination", new object[] { "excludeFilter" }));
     }
     if (this.itemsSorted == null)
     {
         this.UpdateColumnOrderCache();
     }
     for (int i = this.itemsSorted.Count - 1; i >= 0; i--)
     {
         DataGridViewColumn column = (DataGridViewColumn)this.itemsSorted[i];
         if (column.StateIncludes(includeFilter) && column.StateExcludes(excludeFilter))
         {
             this.lastAccessedSortedIndex = i;
             return(column);
         }
     }
     return(null);
 }
        public DataGridViewColumn GetPreviousColumn(DataGridViewColumn dataGridViewColumnStart, DataGridViewElementStates includeFilter, DataGridViewElementStates excludeFilter)
        {
            if (dataGridViewColumnStart == null)
            {
                throw new ArgumentNullException("dataGridViewColumnStart");
            }
            if ((includeFilter & ~(DataGridViewElementStates.Visible | DataGridViewElementStates.Selected | DataGridViewElementStates.Resizable | DataGridViewElementStates.ReadOnly | DataGridViewElementStates.Frozen | DataGridViewElementStates.Displayed)) != DataGridViewElementStates.None)
            {
                throw new ArgumentException(System.Windows.Forms.SR.GetString("DataGridView_InvalidDataGridViewElementStateCombination", new object[] { "includeFilter" }));
            }
            if ((excludeFilter & ~(DataGridViewElementStates.Visible | DataGridViewElementStates.Selected | DataGridViewElementStates.Resizable | DataGridViewElementStates.ReadOnly | DataGridViewElementStates.Frozen | DataGridViewElementStates.Displayed)) != DataGridViewElementStates.None)
            {
                throw new ArgumentException(System.Windows.Forms.SR.GetString("DataGridView_InvalidDataGridViewElementStateCombination", new object[] { "excludeFilter" }));
            }
            if (this.itemsSorted == null)
            {
                this.UpdateColumnOrderCache();
            }
            int columnSortedIndex = this.GetColumnSortedIndex(dataGridViewColumnStart);

            if (columnSortedIndex == -1)
            {
                bool flag         = false;
                int  num2         = -1;
                int  displayIndex = -1;
                columnSortedIndex = 0;
                while (columnSortedIndex < this.items.Count)
                {
                    DataGridViewColumn column = (DataGridViewColumn)this.items[columnSortedIndex];
                    if (((column.StateIncludes(includeFilter) && column.StateExcludes(excludeFilter)) && ((column.DisplayIndex < dataGridViewColumnStart.DisplayIndex) || ((column.DisplayIndex == dataGridViewColumnStart.DisplayIndex) && (column.Index < dataGridViewColumnStart.Index)))) && ((column.DisplayIndex > displayIndex) || ((column.DisplayIndex == displayIndex) && (column.Index > num2))))
                    {
                        num2         = columnSortedIndex;
                        displayIndex = column.DisplayIndex;
                        flag         = true;
                    }
                    columnSortedIndex++;
                }
                if (!flag)
                {
                    return(null);
                }
                return((DataGridViewColumn)this.items[num2]);
            }
            columnSortedIndex--;
            while (columnSortedIndex >= 0)
            {
                DataGridViewColumn column2 = (DataGridViewColumn)this.itemsSorted[columnSortedIndex];
                if (column2.StateIncludes(includeFilter) && column2.StateExcludes(excludeFilter))
                {
                    this.lastAccessedSortedIndex = columnSortedIndex;
                    return(column2);
                }
                columnSortedIndex--;
            }
            return(null);
        }