Heim >Betrieb und Instandhaltung >Sicherheit >So verwenden Sie das XtraGrid-Scrollrad zum Umblättern

So verwenden Sie das XtraGrid-Scrollrad zum Umblättern

PHPz
PHPznach vorne
2023-05-15 20:43:091054Durchsuche

Das Umblättern mit dem Rad und das Umblättern von Übertragungsseiten sind bequemer. Nach einiger Diskussion und Überlegung habe ich schließlich das Umblättern mit dem Mausrad in GridView von XtraGrid implementiert.

Ich habe eine neue Komponente erstellt, die das ursprüngliche GridControl erbt, und der Komponente eine ImageList hinzugefügt, um einige Ressourcenbilder zu speichern. Wird verwendet, um den Effekt dynamischer Grafiken zu erzielen.

Fügen Sie einen benutzerdefinierten Delegate-Parameter und eine Aufzählung hinzu. Der Delegate-Parameter wird zum Übergeben von Paging-Informationen verwendet.

    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
    }

Fügen Sie die folgenden Felder in der Komponentenklasse hinzu

        /// <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;

Fügen Sie die folgenden Attribute hinzu

         
         
          (!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; }

Folgende Delegierte und Ereignisse hinzufügen
        /// <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;
Die Im Folgenden finden Sie einige Einstellungen für die Steuerelemente, die je nach den Vorlieben jedes Einzelnen geändert werden können.

        /// <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);
        }
Registrieren Sie die folgenden Methoden für die Ereignisse des Steuerelements

       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();
            }
        }
Das TopRowChanged-Ereignis wird ausgelöst, wenn sich die erste Zeile des Rasters ändert, ähnlich dem Scroll-Ereignis der Bildlaufleiste. Hier werden zwei Threads geöffnet, der erste Thread dient zum Lesen von Daten und der zweite Thread zum Implementieren dynamischer Grafiken. Die von beiden Threads aufgerufenen Methoden sind unten aufgeführt.

         
         
          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 =  (= ++
Es ​​gibt jedoch ein Problem mit diesem Code. Wenn die an das GridControl gebundene Datenquelle untergeordnete Elemente derselben Instanz hat, wird das TopRowChanged-Ereignis kontinuierlich mit dem Aufruf der RefreshData-Methode ausgelöst Der genaue Grund ist mir noch nicht bekannt. Die Lösung für dieses Problem besteht darin, entweder dieselben Instanzunterelemente aus der Datenquelle zu entfernen oder die RefreshData-Methode nicht aufzurufen.

Das obige ist der detaillierte Inhalt vonSo verwenden Sie das XtraGrid-Scrollrad zum Umblättern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen