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

  • 相关阅读:
    从业十余年谈谈对dotnet看法与坚持
    monodroid 调用 JNI Native 的一些问题
    application数据库连接池spring.datasource.type=com.alibaba.druid.pool.DruidDataSource报错
    IDEA创建Spring Boot项目无法连接http://start.spring.io 解决方法
    mysql安装和sqlyog,mysql缺少依赖
    idea配置本地maven
    idea2020v1.3设置中文
    java安装及javac报错解决方法
    微信小程序数组里的值修改,for循环修改数组内容
    微信小程序如何获取屏幕高度和宽度
  • 原文地址:https://www.cnblogs.com/edzjx/p/2178958.html
Copyright © 2011-2022 走看看