您好,欢迎访问一九零五行业门户网

如何进行XtraGrid滚轮翻页

滚轮翻页与传动的翻页更为方便,经过本人一番探讨与琢磨终于在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>,
else
{
while (this.mainview.datarowcount > 0)
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;
以下则是一些对控件的设置,按照各人喜好可以有所更改。
        /// <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事件在grid的首行改变了就会触发,类似于滚动条的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滚轮翻页的详细内容。
其它类似信息

推荐信息