本文目的:动态设置DataPager控件中页码的图片。

使用ListView+DataPager进行绑定数据时,遇到的一个问题?

当使用DataPager时,NextPreviousPagerField有三个ButtonType 类型(Button\Image\Link),当使用ButtonType=Image时,会涉及做切换图片的问题?

ps. 为什么要切换图片显示呢?是因为翻页时,如果翻到最后一页时,切换一张无效的图片,让用户感觉到已经不能再点击了。

那在程序中如何动态切换图片呢?

早先,我一直以为使用DataPager自身的事件就可以搞定,玩了半天DataPager----OnDataBinding、OnInit、OnPreRender都是不可以了;

虽然其中OnInit、OnPreRender是可以动态改变图片的,但是在这个事件中无法取当数据的页码值,(就是不知道用户翻到几页了,是最后一页还是第一页)。

其实,实现这个需求也蛮简单的,直接使用ListView中OnDataBinding事件就可以实现动态加载不同状态的图片了。

说白了DataPager还是围绕着ListView工作的,毕竟DataPager中PageControlID=ListViewID的

  最后

附上代码

Page:

代码

<form id="form1" runat="server">
<asp:ListView ID="ProductList" runat="server" OnDataBinding="ProductList_DataBinding"
OnPagePropertiesChanging="ProductList_PagePropertiesChanging">
<ItemTemplate>
<%#Eval ( "Test" )%>
</ItemTemplate>
</asp:ListView>
<br />
<asp:DataPager ID="dpHotelInfoList" runat="server" PagedControlID="ProductList" PageSize="5">
<Fields>
<asp:NextPreviousPagerField ButtonType="Image" ShowFirstPageButton="true" ShowLastPageButton="true" />
</Fields>
</asp:DataPager>
</form>

CodeFile:

/// <summary>
    /// Page_Load
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void Page_Load ( object sender , EventArgs e ) {
        if ( !IsPostBack ) {
            //创建数据源
            var dataSource = new List<TestList> ();
            for ( int i = 0 ; i < 71 ; i++ ) {
                dataSource.Add ( new TestList () { Test=i } );
            }
            ViewState.Add ( "db" , dataSource );
            DBList = ViewState ["db"] as List<TestList>;

//绑定数据到ListView
            ProductList.DataSource = DBList;
            ProductList.DataBind ();
        }
    }
    /// <summary>
    /// PagePropertiesChanging
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void ProductList_PagePropertiesChanging ( object sender , PagePropertiesChangingEventArgs e ) {
        //设置页码
        dpHotelInfoList.SetPageProperties ( e.StartRowIndex , e.MaximumRows , false );

//绑定数据到ListView
        ProductList.DataSource = DBList;
        ProductList.DataBind ();
    }

/// <summary>
    /// 动态切换页码图片
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void ProductList_DataBinding ( object sender , EventArgs e ) {
        //获取当前PageSize
        var curPageSize = ( dpHotelInfoList.StartRowIndex / dpHotelInfoList.PageSize ) + 1;

var np = dpHotelInfoList.Fields [0] as NextPreviousPagerField;

//如果是最后一页
        if ( curPageSize == 15 ) {
            //设置末页、下一页按钮为失效状态图片
            np.FirstPageImageUrl = "~/Enabled.gif";
            np.PreviousPageImageUrl = "~/Enabled.gif";
            np.NextPageImageUrl = "~/disabled.gif";
            np.LastPageImageUrl = "~/disabled.gif";
        }
        else if ( curPageSize == 1 ) {
            //设置首页、上一页按钮为失效状态图片
            np.FirstPageImageUrl = "~/disabled.gif";
            np.PreviousPageImageUrl = "~/disabled.gif";
            np.NextPageImageUrl = "~/Enabled.gif";
            np.LastPageImageUrl =  "~/Enabled.gif";
        }
        else {
            //设置所有按钮都为有效状态图片
            np.FirstPageImageUrl = "~/Enabled.gif";
            np.PreviousPageImageUrl = "~/Enabled.gif";
            np.NextPageImageUrl = "~/Enabled.gif";
            np.LastPageImageUrl = "~/Enabled.gif";
        }
    }

private List<TestList> dbList;
    public List<TestList> DBList {
        get { return ViewState ["db"] as List<TestList>; }
        set {
            dbList = value;
        }
    }
}

/// <summary>
/// 创建数据序列
/// </summary>
[Serializable]
public class TestList {
    public int Test { get; set; }
}

代码下载:DynamicSettingImageUrlInDataPager

转载于:https://www.cnblogs.com/RuiLei/archive/2010/06/02/1750378.html

Dynamic Setting ImageUrl In DataPager相关推荐

  1. 今日arXiv精选 | Survey/ICCV/ACM MM/ICML/CIKM/SIGIR/RecSys/IROS

     关于 #今日arXiv精选  这是「AI 学术前沿」旗下的一档栏目,编辑将每日从 arXiv 中精选高质量论文,推送给读者. Scalable pragmatic communication via ...

  2. 05.elasticsearch-index相关总结

    文章目录 1. 简介 2. index常规设置 1. static setting 1. index.number_of_shards 2. index.shard.check_on_startup ...

  3. 数据科学家和人工智能职业生涯之外软件公司之外的热门市场

    The dream career is one of the major tech firms for many aspiring data scientists. 吨他梦寐以求的职业是许多有抱负的数 ...

  4. CodeBlocks 主题美化(编辑器修改主题)

    Codeblocks编辑器修改主题,配置Sublime主题.更改行号宽度,更改左边空白边框的颜色.(文末有惊喜) 本篇博客讲的是如何修改codeblocks的编辑器主题,使得编辑器更加的好看,写代码的 ...

  5. Terraform学习2

    Terraform学习2 在上一篇文章中我们已经会使用Terraform创建一个优雅的项目了,这一章中,我们讲探讨一下Terraform的一些更深入的内容. 推荐文章&文档内容来源:Intro ...

  6. Android 监听wifi总结

    功能实现:控制wifi开关,连上某个特定的wifi. 首先先上个wifi工具类,此类转载网上一人,出处不明了. package rodar.rgs.conference.utils;import ja ...

  7. EvolveGCN:动态图的参数演化图卷积网络 AAAI2020

    EvolveGCN: Evolving Graph Convolutional Networks for Dynamic Graphs 论文链接. Abstract 由于深度学习在欧几里得数据中的广泛 ...

  8. Flutter Dio在 Charles等 抓包工具设置配置

    前些天提测新业务,QA反馈Flutter 页面不能抓包,以前看数据信息都是通过log收集,没有单独通过抓包查看数据,对QA来说不能抓包确实是问题.查了一下发现Dio框架是默认不允许抓包的,需要额外配置 ...

  9. CodeBlocks 配色方案设置

    最终效果(官方sublime修改版) 官方配色 codeblocks是一个功能很强大编程软件,我们在安装codeblocks后软件默认的是白底黑字界面,这种界面在长时间写代码时会对眼睛造成很大伤害,增 ...

最新文章

  1. Spring Boot集成持久化Quartz定时任务管理
  2. 关于网络唤醒远程开机的方法
  3. th:text为null报错_小猿圈web前端之vue-cli项目打包完成后运行文件路径报错问题
  4. Hibernate的常用API
  5. 【小白学习C++ 教程】十七、C++ 中的字符数组和字符串常见的函数
  6. 音视频技术开发周刊 | 190
  7. 使用java理解程序逻辑 第十二章_Java多线程中锁的理解与使用(二)
  8. 下半年值得关注的新机和科技趋势
  9. extjs 兼容性问题解决方案
  10. 站在知乎肩上-做更强的自己(2)
  11. 2009年9月手机搜索热门关键词排行榜
  12. 显示器选购参数解析-为了给笔记本买个外接显示器,我的笔记本核显支持4K60Hz吗
  13. ccproxy如何设置
  14. 谷歌浏览器清除dns缓存
  15. redis使用中经常出现 Could not get a resource from the pool 异常,解决办法总结
  16. 学习SEO有别的味道
  17. 大数据Spark(三):框架模块初步了解
  18. 数据结构-链表 JavaScript | 有图 | 有过程 | 有真相
  19. 震坤行旗下坤同智能仓储助力「数字龙华」闯关破题
  20. linux 运行 hyper v,Microsoft Loves Linux—运行在Hyper-V上的Linux与FreeBSD

热门文章

  1. MySQL在登陆时出现ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)错误...
  2. exist not exist 分析
  3. NOIp2018 Mission Failed Level F
  4. HttpURLConnection post请求 数据接收
  5. Daily Scrum02 12.07
  6. VirtualBox uuid冲突问题
  7. Django用法(一)
  8. 如何弄一个IPHONE 添加到桌面的图标
  9. 日期参数format格式详细用法
  10. centos linux 系统上 log4j打印的时间与CST时间差8小时的解决方法