私はかなりうまくいく解決策を見つけました。私は自分自身の "グループツリー"を &のCrystalReportViewer
の横に配置し、実際の視聴者を隠すように作成しました。GroupTree
ListBox
は、独自のスクロール位置と現在の選択範囲を維持します。このアプローチの追加ボーナスは、フォーカスがある限り、矢印キーを使用して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
と対戦していませんでしたが、私はそれが非常に実行可能であると信じています。
このような違いが見える&であっても、クライアントはこの目標を達成するために新しいコントロールが構築されたことに気づいていませんでした。