2011-06-30 28 views
0

Visual Studio 2008で作成されたCrystal Reportで、さまざまな株価が表示されています。 Crystal Report Viewerのグループツリーが有効になります。&は、容易にナビゲートできるように株式コードのリストを表示します。グループツリーのリストは非常に長くなり(100以上の株式コード)、スクロールバーが表示されます。Crystal Report Grouptreeのスクロール位置を維持する

問題は、ユーザーがグループツリーからストックコードを選択すると、そのページが&のグループツリー上のスクロール位置を失ったことを示すことです。これは特に、リストの終わりに向かっている株式コードを使って作業しているときに、特にイライラします。

グループツリーの現在のスクロール位置を取得する方法はありますか?&は、レポートがリロードされた後に再度割り当てますか?

私はしかし、多くの成功なしに、試してみましたいくつかの点:

グループツリーはなく、IDなしで、div要素としてレンダリングされます。だから私は、サーバー側からレポートビューアControlsコレクション(それはコレクションの4番目のコントロール)を使用してグループツリーコントロールを取得しました&は、そのUniqueID値をチェックしました。私はdocument.getElementById()を呼び出すためにそれを使用しましたが、これは常にnullを返します。 また、グループツリーコントロールでGetType()を呼び出すときに指定された型であるクラス(CrystalDecisions.Web.CrystalReportGroupTree)が見つからないため、サーバー側から取得するコントロールを使用できません。

この件に関するお手伝いをさせていただきます。

答えて

0

私はかなりうまくいく解決策を見つけました。私は自分自身の "グループツリー"を &のCrystalReportViewerの横に配置し、実際の視聴者を隠すように作成しました。GroupTreeListBoxは、独自のスクロール位置と現在の選択範囲を維持します。このアプローチの追加ボーナスは、フォーカスがある限り、矢印キーを使用してGroupTreeをナビゲートすることができるということです。

私はCrystalReportViewerの左に配置ページ&に標準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> 

が最初に隠されているレポートの条件が両方ビューアー& ListBox見えるようになります、その時点で、選択されるまで、次のようなマークアップです。

次に、レポートがバインドされているものと同じデータを返すデータソースにListBoxをバインドします。私の場合は、私のレポートがバインドされているストアドプロシージャと同じSQLクエリを使用してストックコードを取得するメソッドを作成しました。

最後に、表示されたレポートで、ListBoxで選択された値を検索します。

protected void lstStockCode_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    if (ViewState["PrevListIndex"] == null) 
     CrystalReportViewer1.SearchAndHighlightText(lstStockCode.SelectedItem.Text, CrystalDecisions.Shared.SearchDirection.Forward); 
    else if (Convert.ToInt32(ViewState["PrevListIndex"]) < lstStockCode.SelectedIndex) 
     CrystalReportViewer1.SearchAndHighlightText(lstStockCode.SelectedItem.Text, CrystalDecisions.Shared.SearchDirection.Forward); 
    else if (Convert.ToInt32(ViewState["PrevListIndex"]) > lstStockCode.SelectedIndex) 
     CrystalReportViewer1.SearchAndHighlightText(lstStockCode.SelectedItem.Text, CrystalDecisions.Shared.SearchDirection.Backward); 

    ViewState["PrevListIndex"] = lstStockCode.SelectedIndex; 

    CrystalReportViewer1.ToolbarStyle.Width = Unit.Parse("1096px"); 
    lstStockCode.Focus(); 
} 

探索方向がCrystalReportViewerのために指定する必要があるため、私はちょうど私の現在の検索インデックス&私はさらに下探してるかどうかを判断するかレポートでバックアップを保存し、下記のSelectedIndexChangedイベントのサンプルがありますレポート&と同じクエリを使用してListBoxが返されていることを確認すると、レポートデータと同じ順序になります。

この実装については、主にスタイリングの点で興味深い点がいくつかあります。提供されたコードはCrystalReportViewer Toolbarの再配置のための準備をしません。 ListBoxはレポートに沿って配置されていますが、通常はToolbarが存在する場所の上に空白があります。また、TreeViewのような点線はListBoxの内部には表示されません。私はTreeViewコントロールを使用して同じ効果を達成するためにListBoxと対戦していませんでしたが、私はそれが非常に実行可能であると信じています。

このような違いが見える&であっても、クライアントはこの目標を達成するために新しいコントロールが構築されたことに気づいていませんでした。

関連する問題