2012-05-09 19 views
2

今、私はASP.netとC#で作業しています。GridViewで選択した行にスクロールする方法

私はPageSize = 20(20行)のGridViewを持っています。

ただし、10行しか表示されず、垂直スクロールバーが表示されます。

私の問題は....
ポストバックが発生すると、グリッドの一番上の行にジャンプします。他の行は選択しましたが、私はそれを選択された行にスクロールしたいと思います。どうすればこのことができますか?私を助けてください。

答えて

1

は、あなたのpageディレクティブでMaintainScrollPositionOnPostbackを追加します。

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" MaintainScrollPositionOnPostback ="true"%> 

もう一つの方法は、あなたのGridViewをラップDIVのscrollTopスプライトメソッドを使用します。

private void ScrollGrid() 
{ 
    int intScrollTo = this.gridView.SelectedIndex * (int)this.gridView.RowStyle.Height.Value; 
    string strScript = string.Empty; 
    strScript += "var gridView = document.getElementById('" + this.gridView.ClientID + "');\n"; 
    strScript += "if (gridView != null && gridView.parentElement != null && gridView.parentElement.parentElement != null)\n"; 
    strScript += " gridView.parentElement.parentElement.scrollTop = " + intScrollTo + ";\n"; 
    ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "ScrollGrid", strScript, true); 
} 

EDIT: これは、いくつかの理由で動作しません。

1)の場合クライアント側のIdはClientIdではないため、gridViewはPanelのようなNamingContainerコントロールの内部にあります。代わりにUniqueIdの制御を使用する必要があります。

2)スクロール位置を計算するために行の高さを信頼することはできません。いずれかの列のテキストが複数の行に折り返されている場合、またはいずれの行にもスタイルよりも高い行が含まれている場合、行のサイズが異なります。3)ブラウザによって動作が異なる可能性があります。 jQuery scrollTop()scroll()の関数を使うほうがいいです。それらを使用するには、クライアント側でscrollTopを使用し、サーバー側で読み取ることができるHiddenControlの値を設定して位置をリセットする必要があります。クライアント側でレンダリングされるまで、ブラウザの行の高さを取得することはできません。

関連する問題