Maison Opération et maintenance Sécurité Comment utiliser la molette de défilement XtraGrid pour tourner les pages

Comment utiliser la molette de défilement XtraGrid pour tourner les pages

May 15, 2023 pm 08:43 PM
xtragrid

Le changement de page avec la molette de la souris et le changement de page de transmission sont plus pratiques. Après quelques discussions et réflexions, j'ai finalement implémenté le changement de page avec la molette de la souris dans GridView de XtraGrid.

J'ai créé un nouveau composant qui hérite du GridControl d'origine et ajouté une ImageList au composant pour stocker certaines images de ressources. Utilisé pour obtenir l'effet de graphiques dynamiques.

Ajoutez un paramètre délégué personnalisé et une énumération. Le paramètre délégué est utilisé pour transmettre les informations de pagination.

    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
    }
Copier après la connexion

Ajoutez les champs suivants dans la classe de composants

        /// <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;
Copier après la connexion

Ajoutez les attributs suivants

         
         
          (!IsPaging)   (!IsPaging) =
                (value>,
Copier après la connexion

        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; }
Copier après la connexion

Ajoutez les délégués et événements suivants
        /// <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;
Copier après la connexion
Le Voici quelques paramètres des commandes, qui peuvent être modifiés selon les préférences de chacun.

        /// <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);
        }
Copier après la connexion
Enregistrez les méthodes suivantes pour les événements du contrôle

       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();
            }
        }
Copier après la connexion
L'événement TopRowChanged sera déclenché lorsque la première ligne de la grille change, similaire à l'événement Scroll de la barre de défilement. Deux threads sont ouverts ici, le premier thread est utilisé pour lire les données et le deuxième thread est utilisé pour implémenter des graphiques dynamiques. Les méthodes appelées par les deux threads sont ci-dessous

         
         
          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 =  (= ++
Copier après la connexion
Cependant, il y a un problème avec ce code Lorsque la source de données liée au GridControl a des enfants de la même instance, l'événement TopRowChanged sera déclenché en continu avec l'appel de la méthode RefreshData. . La raison exacte est encore inconnue. Je ne comprends pas. La solution à ce problème consiste soit à supprimer les mêmes sous-éléments d'instance sur la source de données, soit à ne pas appeler la méthode RefreshData.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Où trouver la courte de la grue à atomide atomique
1 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)