FineUI 官方论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

本论坛已关闭(禁止注册、发帖和回复)
请移步 三石和他的朋友们

FineUI首页 WebForms - MVC & Core - JavaScript 常见问题 - QQ群 - 十周年征文活动

FineUI(开源版) 下载源代码 - 下载空项目 - 获取ExtJS - 文档 在线示例 - 版本更新 - 捐赠作者 - 教程

升级到 ASP.NET Core 3.1,快、快、快! 全新ASP.NET Core,比WebForms还简单! 欢迎加入【三石和他的朋友们】(基础版下载)

搜索
查看: 5371|回复: 6
打印 上一主题 下一主题

【已解决】Grid在数据库分页时树形显示问题

[复制链接]
跳转到指定楼层
楼主
发表于 2013-3-6 10:18:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ExtAspNet和浏览器版本:
ExtAspNet 3.2.3.0,浏览器 Firefox 19.0.1

问题描述:连续检索时数据库分页显示数据出错


测试代码或示例:(有附件)
前台代码:
  1. <body>
  2.     <form id="form1" runat="server">
  3.     <x:PageManager ID="PageManager1" runat="server" AutoSizePanelID="panel1" />
  4.     <x:Panel ID="panel1" runat="server" Layout="VBox" ShowBorder="true" ShowHeader="false">
  5.         <Items>
  6.             <x:SimpleForm ID="simpleForm1" runat="server" ShowBorder="false" ShowHeader="false">
  7.                 <Items>
  8.                     <x:TriggerBox ID="tbSearch" runat="server" ShowTrigger="true" OnTriggerClick="tbSearch_Click" BoxFlex="1"
  9.                         Label="请输入条件:" Width="200px">
  10.                     </x:TriggerBox>
  11.                 </Items>
  12.             </x:SimpleForm>
  13.             <x:Grid ID="Grid1" runat="server" EnableCheckBoxSelect="true" EnableRowNumber="true"
  14.                 IsDatabasePaging="true" PageSize="5" AllowPaging="true" AllowSorting="false"
  15.                 ShowBorder="true" ShowHeader="true" Title="表格" BoxFlex="1" DataKeyNames="ID" OnPageIndexChange="Grid1_PageIndexChange">
  16.                 <Columns>
  17.                     <x:BoundField DataField="ID" HeaderText="ID" DataSimulateTreeLevelField="Level" />
  18.                     <x:BoundField DataField="Name" HeaderText="Name" />
  19.                     <x:BoundField DataField="ParentId" HeaderText="ParentId" />
  20.                     <x:BoundField DataField="Level" HeaderText="Level" />
  21.                 </Columns>
  22.             </x:Grid>
  23.         </Items>
  24.     </x:Panel>
  25.     </form>
  26. </body>
复制代码
后台代码:
  1. /// <summary>
  2.         /// 分页
  3.         /// </summary>
  4.         private int Pagination
  5.         {
  6.             get
  7.             {
  8.                 if (ViewState["Pagination"] == null)
  9.                 {
  10.                     ViewState["Pagination"] = 0;
  11.                 }
  12.                 return Convert.ToInt32(ViewState["Pagination"]);
  13.             }
  14.             set
  15.             {
  16.                 ViewState["Pagination"] = value;
  17.             }
  18.         }

  19.         /// <summary>
  20.         /// 查询类
  21.         /// </summary>
  22.         private QueryExample QueryE
  23.         {
  24.             get
  25.             {
  26.                 if (ViewState["QueryE"] == null)
  27.                 {
  28.                     ViewState["QueryE"] = new QueryExample() { Name = "" };
  29.                 }
  30.                 return ViewState["QueryE"] as QueryExample;
  31.             }
  32.             set
  33.             {
  34.                 ViewState["QueryE"] = value;
  35.             }
  36.         }

  37.         protected void Page_Load(object sender, EventArgs e)
  38.         {
  39.             if (!IsPostBack)
  40.             {
  41.                 BindExampleList();
  42.             }
  43.         }

  44.         private void BindExampleList()
  45.         {
  46.             var list = ChangePage();
  47.             Grid1.DataSource = list;
  48.             Grid1.DataBind();
  49.         }

  50.         /// <summary>
  51.         /// 获取查询分页数据
  52.         /// </summary>
  53.         private List<ExampleClass> ChangePage()
  54.         {
  55.             var list = GetExampleList();
  56.             var pageSize = this.Grid1.PageSize;//分页大小
  57.             var roots = list.FindAll(example => (this.QueryE.Name == "" && example.ParentId == 0) || (example.ParentId == 0 && example.Name.Contains(this.QueryE.Name)));//找到根节点
  58.             var pageCount = (int)(roots.Count / pageSize) + ((roots.Count % pageSize) == 0 ? 0 : 1);//总页数
  59.             var exampleList = new List<ExampleClass>();

  60.             if (roots.Count > 0)
  61.             {
  62.                 var childrenList = new List<ExampleClass>();
  63.                 var firstNum = pageSize * this.Pagination;
  64.                 var endNum = (firstNum + pageSize) > roots.Count ? roots.Count : (firstNum + pageSize);
  65.                 for (int i = firstNum; i < endNum; i++)
  66.                 {
  67.                     exampleList.Add(roots[i]);
  68.                     childrenList = list.FindAll(example => example.ParentId == roots[i].ID);
  69.                     foreach (var item in childrenList)
  70.                     {//设定最多只有两层
  71.                         exampleList.Add(item);
  72.                     }
  73.                 }
  74.             }

  75.             this.Grid1.RecordCount = roots.Count;
  76.             return exampleList;
  77.         }

  78.         protected void Grid1_PageIndexChange(object sender, FineUI.GridPageEventArgs e)
  79.         {
  80.             this.Grid1.PageIndex = e.NewPageIndex;
  81.             this.Pagination = e.NewPageIndex;
  82.             this.BindExampleList();
  83.         }

  84.         protected void tbSearch_Click(object sender, EventArgs e)
  85.         {
  86.             var keyWord = this.tbSearch.Text.Trim();
  87.             this.QueryE.Name = keyWord == null ? "" : keyWord;
  88.             this.BindExampleList();
  89.         }
复制代码
文件见附件TestGridPage.aspx,TestGridPage.aspx.cs,TestGridPage.aspx.designer.cs

实际与期望的运行结果:
检索的时候,绑定的数据条数跟显示的数据条数都不一样的。还有一种情况是,假如前面第一次检索“课”的第一页数据总条数(不是根节点数)是17,第二次输入“学”字检索,界面没有任何变化!后台跟踪了返回的数据是正确的8条,但是绑定了以后,界面没有变化,还是以前的搜索结果。(只要后一次数据比前一次数据少,界面就没有反应)

截图:
检索“班”,如图1,去掉“班”再检索“色”,如图3,期望结果应该如图4;
清空检索所有,再检索“班”,如图1,去掉“班”再检索“证”,如图2,期望结果应该如图5。























本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
沙发
发表于 2013-3-19 18:01:50 | 只看该作者
这个问题提得好,我看了你的代码,你是希望PageSize=5指的是根节点的数目,这和FineUI默认的不一致。

我会解决这个问题,并给出官方示例。
板凳
发表于 2013-3-20 11:33:42 | 只看该作者
已经解决,更新会出现在下个版本中。

+数据库分页时支持每页显示的记录数不同(appletreegd)。

如果你想尝试一下,可以下载全部的源代码,自己编译一个DLL使用:http://fineui.codeplex.com/SourceControl/BrowseLatest
地板
发表于 2013-3-20 09:10:44 | 只看该作者
增加了三个示例,需要的同学可以自行下载最新源代码。

+数据库分页时支持每页显示的记录数不同(appletreegd)。
   -增加示例grid/grid_simulate_tree_paging.aspx、grid/grid_simulate_tree_database_paging.aspx。
   -增加示例grid/grid_simulate_tree_database_paging_dropdownlist.aspx。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
5#
发表于 2013-3-21 01:52:53 | 只看该作者
我怎么了看了半天也没有找到解决方案啊,能不能说的清楚一点
6#
发表于 2013-3-21 01:56:13 | 只看该作者
大海中一滴水 发表于 2013-3-21 01:52
我怎么了看了半天也没有找到解决方案啊,能不能说的清楚一点

更新了FineUI源代码,你需要自己下载最新的源代码编译
7#
发表于 2013-3-21 02:09:33 | 只看该作者
编译出来一个dll,然后把原来项目中的FineUI.ll删除了,重新添加编译出来就ok了,谢谢老大
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|FineUI 官方论坛 ( 皖ICP备2021006167号-1 )

GMT+8, 2024-11-24 23:50 , Processed in 0.048414 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表