>운영 및 유지보수 >안전 >XtraGrid 스크롤 휠을 사용하여 페이지를 넘기는 방법

XtraGrid 스크롤 휠을 사용하여 페이지를 넘기는 방법

PHPz
PHPz앞으로
2023-05-15 20:43:091020검색

휠 페이지 넘기기와 전송 페이지 넘기기가 더 편리해졌습니다. 몇 가지 논의와 고민 끝에 마침내 XtraGrid의 GridView에서 마우스 휠 페이지 넘기기를 구현했습니다.

원본 GridControl을 상속하는 새 구성 요소를 만들고 일부 리소스 이미지를 저장하기 위해 구성 요소에 ImageList를 추가했습니다. 동적 그래픽 효과를 얻는 데 사용됩니다.

사용자 정의 대리자 매개변수 및 열거를 추가합니다. 대리자 매개변수는 페이징 정보를 전달하는 데 사용됩니다.

    public class PagingEventArgs : EventArgs
    {        public int PageSize { get; set; }        public int PageIndex { get; set; }
    }    public enum LoadState
    { 
        /// <summary>
        /// 就绪        /// </summary>        Ready,        /// <summary>
        /// 正在读取        /// </summary>        Loading,        /// <summary>
        /// 读取完成        /// </summary>        Finish
    }

구성 요소 클래스에 다음 필드를 추가합니다.

        /// <summary>
        /// 页面大小        /// </summary>
        private int _int_page_size=20;        /// <summary>
        /// 当前页索引        /// </summary>
        private int _int_page_index=1;        /// <summary>
        /// 总记录数        /// </summary>
        private int _int_record_count;        /// <summary>
        /// 读取状态 
        /// </summary>
        private LoadState _LodaState_state;

다음 속성을 추가합니다

         
         
          (!IsPaging)   (!IsPaging) =
                (value>,

        GridView_main_view.DeleteRow(0);
      this.RefreshDataSource();
      }

            }
        }        /// <summary>
        /// 每次读取的行数        /// </summary>
        public int PageSize
        {            get 
            {                if (!IsPaging) return 0;                return _int_page_size; 
            }            set 
            {                if (!IsPaging) return ;
                _int_page_size = value; 
            }
        }        /// <summary>
        /// 总页数        /// </summary>
        private int PageCount
        {            get 
            {                if (RecordCount % PageSize == 0)                    return RecordCount / PageSize;                return RecordCount / PageSize + 1;
            }
        }        /// <summary>
        /// Grid        /// </summary>
        private GridView _GridView_main_view
        {            get { return (GridView)this.MainView; }
        }        /// <summary>
        /// 是否启用分页        /// </summary>
        public bool IsPaging { get; set; }

다음 대표자와 이벤트를 추가하세요
        /// <summary>
        /// 内部使用的委托        /// </summary>
        private delegate void myDelegate();        /// <summary>
        /// 滚动翻页的委托        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public delegate void ScrollingToPageEventHandler(object sender, PagingEventArgs e);        /// <summary>
        /// 滚动翻页的事件        /// </summary>
        public event ScrollingToPageEventHandler OnScrollingToPage;
The 다음은 모든 사람의 선호에 따라 변경할 수 있는 컨트롤에 대한 일부 설정입니다.

        /// <summary>
        /// 设置分页栏        /// </summary>
        private void InitEmbeddedNavigator()
        {this.EmbeddedNavigator.CustomButtons.AddRange(new DevExpress.XtraEditors.NavigatorCustomButton[] {            new DevExpress.XtraEditors.NavigatorCustomButton(-1, -1, true, false, "", null)});            this.EmbeddedNavigator.TextStringFormat = "  当前 {1} 行数据  ";            this.UseEmbeddedNavigator = true;

        }        /// <summary>
        /// 设置gridView        /// </summary>
        private void InitGridView()
        { 
            _GridView_main_view.TopRowChanged += new EventHandler(gridView_TopRowChanged);
        }
컨트롤 이벤트에 대해 다음 메서드를 등록하세요.

       private void gridControl_Load(object sender, EventArgs e)
        {            if (IsPaging)
            {
                _LodaState_state = LoadState.Ready;

                InitEmbeddedNavigator();
                InitGridView();
            }
        }        private void gridView_TopRowChanged(object sender, EventArgs e)
        {            lock (this)
            {                if ( _int_page_index > PageCount || _LodaState_state != LoadState.Ready) return;
            }            //检查是否到达底部
            if (_GridView_main_view.IsRowVisible(_GridView_main_view.RowCount - 1) == RowVisibleState.Visible||
                _int_page_index==1)
            {                lock (this)//设置成开始读取状态                {
                    _LodaState_state = LoadState.Loading;
                }
                Thread thread_load_data = new Thread(new ThreadStart(LoadData));
                Thread thread_change_text = new Thread(new ThreadStart(ChangeLoadingImage));
                thread_change_text.Start();
                thread_load_data.Start();
            }
        }
TopRowChanged 이벤트는 스크롤 막대의 Scroll 이벤트와 유사하게 그리드의 첫 번째 행이 변경될 때 트리거됩니다. 여기서는 두 개의 스레드가 열려 있는데 첫 번째 스레드는 데이터를 읽는 데 사용되고 두 번째 스레드는 동적 그래픽을 구현하는 데 사용됩니다. 두 스레드에서 호출한 메서드는

         
         
          top_row_index =  focus_index =  (==
                 (OnScrollingToPage ==   Exception(= = = 
             (.Parent.Invoke( myDelegate(== (= LoadState.Finish; 
         
          p_w_picpath_index =  (.Parent.InvokeRequired).Parent.Invoke( myDelegate(.EmbeddedNavigator.Buttons.CustomButtons[].Visible =  () ( (_LodaState_state != LoadState.Loading)
                         (p_w_picpath_index == = ++ (
                    .Parent.Invoke( myDelegate(.EmbeddedNavigator.Buttons.CustomButtons[].ImageIndex = (.Parent.InvokeRequired).Parent.Invoke( myDelegate(.EmbeddedNavigator.Buttons.CustomButtons[].Visible =  (= ++
아래에 있습니다. 그러나 이 코드에는 GridControl에 바인딩된 데이터 소스에 동일한 인스턴스의 하위 항목이 있는 경우 RefreshData 메서드 호출과 함께 TopRowChanged 이벤트가 계속해서 트리거됩니다. 정확한 이유는 아직 알 수 없습니다. 이 문제에 대한 해결책은 데이터 소스에서 동일한 인스턴스 하위 항목을 제거하거나 RefreshData 메서드를 호출하지 않는 것입니다.

위 내용은 XtraGrid 스크롤 휠을 사용하여 페이지를 넘기는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제