zoukankan      html  css  js  c++  java
  • gridview 与 detailsview 联动 共用一个数据源 完美解决 排序分页

    对于共用数据源方面,网上多是sqldatasource

    这个办法最好的是再gridview_selected事件中添加下面代码

    DetailsView1.PageIndex = GridView1_SelectedRow.DataItemIndex。

    这个代码意思就是让DetailsView的对应的数据视图的数据行号等于GridView对应数据视图的数据行的行号。

    因为两个数据控件的数据源是一致的,理论上两个数据控件上得数据视图是一样。所以上面的代码可以完美解决关联问题,那片有分页。

    (PS:我理解的数据控件绑定的数据源原理是这样的:数据源控件在被绑定时候会生成的DataView数据视图对象,然后再让这个对象绑定到数据控件上,这就解释了GridView为什么能够排序。)

    默认情况下,同一个数据源控件绑定到不同数据控件时,生成的数据视图对象应该都是一致的。但是如果有人改变了其中一个数据控件对应的数据视图,问题就糟糕了。改变的情况往往发生在GridView的排序功能上,启用排序后,并使用了排序,那么绑定在GridView上DataView对象的数据顺序就也就改变了。可糟糕的是绑定在DataView上的饿DataView还是原来的数据顺序。所以这时候,再用DataItemIndex去指向DataView的索引,也就不对了。

    那这个问题怎么解决呢,最好的办法就是通过GridView获取选中行的主键,通过主键定位GridView1的索引。sqldatasource是没办法解决的。因为咱们根本不可能获取到sqldatasource绑定是产生的DataView对象或dataTabel对象。它被完全封装了。

    如果是objectDataSource还可以解决,objectDataSource.select()提供了产生DataView的方法。因为DetailsView是没有排序功能的,它的被绑定的Dataview是不会改变的。我可以通过GridView1.SelectValue获取到主键,在根据sqldatasource.select()的DataView找到这个主键对应的行号。

    DataTable table=((DataView)objectDataSource.select()).Table;

    DetailsView1.PageIndex=table.Rows.IndexOf(table.Rows.Find(GridView1.SelectValue));

  • 相关阅读:
    yum 下载安装包以及依赖包
    《将博客搬至CSDN》
    Lucene
    Solr
    LVS原理详解(3种工作模式及8种调度算法)
    正向代理与反向代理
    网关,网卡
    NAT地址转换
    Nginx学习总结
    网络_OSI模型_数据包传输
  • 原文地址:https://www.cnblogs.com/edzjx/p/2178958.html
Copyright © 2011-2022 走看看