FineUI 官方论坛
标题:
【已解决】Grid在数据库分页时树形显示问题
[打印本页]
作者:
appletreegd
时间:
2013-3-6 10:18
标题:
【已解决】Grid在数据库分页时树形显示问题
ExtAspNet和浏览器版本:
ExtAspNet 3.2.3.0,浏览器
Firefox 19.0.1
问题描述:
连续检索时数据库分页显示数据出错
测试代码或示例:
(有附件)
前台代码:
<body>
<form id="form1" runat="server">
<x:PageManager ID="PageManager1" runat="server" AutoSizePanelID="panel1" />
<x:Panel ID="panel1" runat="server" Layout="VBox" ShowBorder="true" ShowHeader="false">
<Items>
<x:SimpleForm ID="simpleForm1" runat="server" ShowBorder="false" ShowHeader="false">
<Items>
<x:TriggerBox ID="tbSearch" runat="server" ShowTrigger="true" OnTriggerClick="tbSearch_Click" BoxFlex="1"
Label="请输入条件:" Width="200px">
</x:TriggerBox>
</Items>
</x:SimpleForm>
<x:Grid ID="Grid1" runat="server" EnableCheckBoxSelect="true" EnableRowNumber="true"
IsDatabasePaging="true" PageSize="5" AllowPaging="true" AllowSorting="false"
ShowBorder="true" ShowHeader="true" Title="表格" BoxFlex="1" DataKeyNames="ID" OnPageIndexChange="Grid1_PageIndexChange">
<Columns>
<x:BoundField DataField="ID" HeaderText="ID" DataSimulateTreeLevelField="Level" />
<x:BoundField DataField="Name" HeaderText="Name" />
<x:BoundField DataField="ParentId" HeaderText="ParentId" />
<x:BoundField DataField="Level" HeaderText="Level" />
</Columns>
</x:Grid>
</Items>
</x:Panel>
</form>
</body>
复制代码
后台代码:
/// <summary>
/// 分页
/// </summary>
private int Pagination
{
get
{
if (ViewState["Pagination"] == null)
{
ViewState["Pagination"] = 0;
}
return Convert.ToInt32(ViewState["Pagination"]);
}
set
{
ViewState["Pagination"] = value;
}
}
/// <summary>
/// 查询类
/// </summary>
private QueryExample QueryE
{
get
{
if (ViewState["QueryE"] == null)
{
ViewState["QueryE"] = new QueryExample() { Name = "" };
}
return ViewState["QueryE"] as QueryExample;
}
set
{
ViewState["QueryE"] = value;
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindExampleList();
}
}
private void BindExampleList()
{
var list = ChangePage();
Grid1.DataSource = list;
Grid1.DataBind();
}
/// <summary>
/// 获取查询分页数据
/// </summary>
private List<ExampleClass> ChangePage()
{
var list = GetExampleList();
var pageSize = this.Grid1.PageSize;//分页大小
var roots = list.FindAll(example => (this.QueryE.Name == "" && example.ParentId == 0) || (example.ParentId == 0 && example.Name.Contains(this.QueryE.Name)));//找到根节点
var pageCount = (int)(roots.Count / pageSize) + ((roots.Count % pageSize) == 0 ? 0 : 1);//总页数
var exampleList = new List<ExampleClass>();
if (roots.Count > 0)
{
var childrenList = new List<ExampleClass>();
var firstNum = pageSize * this.Pagination;
var endNum = (firstNum + pageSize) > roots.Count ? roots.Count : (firstNum + pageSize);
for (int i = firstNum; i < endNum; i++)
{
exampleList.Add(roots[i]);
childrenList = list.FindAll(example => example.ParentId == roots[i].ID);
foreach (var item in childrenList)
{//设定最多只有两层
exampleList.Add(item);
}
}
}
this.Grid1.RecordCount = roots.Count;
return exampleList;
}
protected void Grid1_PageIndexChange(object sender, FineUI.GridPageEventArgs e)
{
this.Grid1.PageIndex = e.NewPageIndex;
this.Pagination = e.NewPageIndex;
this.BindExampleList();
}
protected void tbSearch_Click(object sender, EventArgs e)
{
var keyWord = this.tbSearch.Text.Trim();
this.QueryE.Name = keyWord == null ? "" : keyWord;
this.BindExampleList();
}
复制代码
文件见附件TestGridPage.aspx,TestGridPage.aspx.cs,TestGridPage.aspx.designer.cs
实际与期望的运行结果:
检索的时候,绑定的数据条数跟显示的数据条数都不一样的。还有一种情况是,假如前面第一次检索“课”的第一页数据总条数(不是根节点数)是17,第二次输入“学”字检索,界面没有任何变化!后台跟踪了返回的数据是正确的8条,但是绑定了以后,界面没有变化,还是以前的搜索结果。(只要后一次数据比前一次数据少,界面就没有反应)
截图:
检索“班”,如图1,去掉“班”再检索“色”,如图3,期望结果应该如图4;
清空检索所有,再检索“班”,如图1,去掉“班”再检索“证”,如图2,期望结果应该如图5。[attach]1833[/attach]
[attach]1832[/attach]
[attach]1831[/attach]
[attach]1830[/attach]
[attach]1829[/attach]
[attach]1828[/attach]
[attach]1833[/attach]
[attach]1832[/attach]
[attach]1831[/attach]
[attach]1830[/attach]
[attach]1829[/attach]
[attach]1828[/attach]
作者:
sanshi
时间:
2013-3-19 18:01
这个问题提得好,我看了你的代码,你是希望PageSize=5指的是根节点的数目,这和FineUI默认的不一致。
我会解决这个问题,并给出官方示例。
作者:
sanshi
时间:
2013-3-20 09:10
增加了三个示例,需要的同学可以自行下载最新源代码。
+数据库分页时支持每页显示的记录数不同(appletreegd)。
-增加示例grid/grid_simulate_tree_paging.aspx、grid/grid_simulate_tree_database_paging.aspx。
-增加示例grid/grid_simulate_tree_database_paging_dropdownlist.aspx。
作者:
sanshi
时间:
2013-3-20 11:33
已经解决,更新会出现在下个版本中。
+数据库分页时支持每页显示的记录数不同(appletreegd)。
如果你想尝试一下,可以下载全部的源代码,自己编译一个DLL使用:
http://fineui.codeplex.com/SourceControl/BrowseLatest
作者:
大海中一滴水
时间:
2013-3-21 01:52
我怎么了看了半天也没有找到解决方案啊,能不能说的清楚一点
作者:
sanshi
时间:
2013-3-21 01:56
大海中一滴水 发表于 2013-3-21 01:52
我怎么了看了半天也没有找到解决方案啊,能不能说的清楚一点
更新了FineUI源代码,你需要自己下载最新的源代码编译
作者:
大海中一滴水
时间:
2013-3-21 02:09
编译出来一个dll,然后把原来项目中的FineUI.ll删除了,重新添加编译出来就ok了,谢谢老大
欢迎光临 FineUI 官方论坛 (https://fineui.com/BBS/)
Powered by Discuz! X3.4