.net 在Crystal Report Grouptree上保持滚动位置

.net 在Crystal Report Grouptree上保持滚动位置,.net,asp.net,crystal-reports-2008,.net,Asp.net,Crystal Reports 2008,我在VisualStudio2008中创建了一个Crystal报表,其中显示了各种股票代码及其价格。Crystal Report Viewer的组树已启用&显示股票代码列表以便于导航。组树中的列表可能变得相当长(100+股票代码),这会导致出现滚动条 问题是,当用户从组树中选择股票代码时,页面会发回&组树上的滚动位置丢失。这尤其令人沮丧,尤其是当您正在处理列表末尾的股票代码时 是否有任何方法可以获取组树的当前滚动位置,保存并在报告重新加载后重新分配 有些事情我试过了,但没有成功: 组树呈现为di

我在VisualStudio2008中创建了一个Crystal报表,其中显示了各种股票代码及其价格。Crystal Report Viewer的组树已启用&显示股票代码列表以便于导航。组树中的列表可能变得相当长(100+股票代码),这会导致出现滚动条

问题是,当用户从组树中选择股票代码时,页面会发回&组树上的滚动位置丢失。这尤其令人沮丧,尤其是当您正在处理列表末尾的股票代码时

是否有任何方法可以获取组树的当前滚动位置,保存并在报告重新加载后重新分配

有些事情我试过了,但没有成功:

组树呈现为div,但没有ID。因此,我使用报表查看器控件集合(它是集合中的第四个控件)从服务器端检索了组树控件并检查了其UniqueID值。然后我用它调用document.getElementById(),但它总是返回null。 此外,我无法使用从服务器端检索的控件,因为我找不到类(CrystalDecisions.Web.CrystalReportGroupTree),这是在组树控件上调用GetType()时提供的类型


在此问题上的任何帮助都将不胜感激。

因此我找到了一个非常有效的解决方案。我已经使用
列表框创建了自己的“组树”
&将其放置在
CrystalReportViewer
旁边,隐藏了查看器的实际
组树
列表框
保持其自身的滚动位置以及当前选择。这种方法的额外好处是,用户可以使用箭头键导航
组树
,只要它有焦点

我的实施方法如下:

<asp:ListBox ID="lstStockCode" runat="server" Width="185px" Height="760px" Font-Size="10pt" AutoPostBack="true" OnSelectedIndexChanged="lstStockCode_SelectedIndexChanged" DataTextField="StockCode" DataValueField="ID" BackColor="#E4E4EC" style="position: relative; top: 30px; border-width: 0px;" Visible="false"></asp:ListBox>
我在页面中添加了一个标准的
ListBox
控件,并将其放置在
CrystalReportViewer
的左侧。标记如下:

<asp:ListBox ID="lstStockCode" runat="server" Width="185px" Height="760px" Font-Size="10pt" AutoPostBack="true" OnSelectedIndexChanged="lstStockCode_SelectedIndexChanged" DataTextField="StockCode" DataValueField="ID" BackColor="#E4E4EC" style="position: relative; top: 30px; border-width: 0px;" Visible="false"></asp:ListBox>
因为需要为
CrystalReportViewer
指定搜索方向,所以我只存储当前的搜索索引并确定我是在报告中进一步向下搜索还是备份,因为我的
列表框
是使用与我的报告相同的查询返回的,因此与报告数据的顺序相同

关于这个实现的一些有趣的事情,主要是在样式方面。提供的代码没有为重新定位
CrystalReportViewer工具栏
做出规定。虽然
列表框
与报表保持一致,但其上方只有
工具栏
通常所在的空白。此外,树状虚线不会出现在
列表框中。我还没有尝试过使用
TreeView
控件而不是
ListBox
来实现相同的效果,但我相信这是非常可行的

即使在外观和感觉方面存在这些差异,客户也不知道为实现这一目标而构建了一个新控件