今、私はASP.netとC#で作業しています。GridViewで選択した行にスクロールする方法
私はPageSize = 20(20行)のGridViewを持っています。
ただし、10行しか表示されず、垂直スクロールバーが表示されます。
私の問題は....
ポストバックが発生すると、グリッドの一番上の行にジャンプします。他の行は選択しましたが、私はそれを選択された行にスクロールしたいと思います。どうすればこのことができますか?私を助けてください。
、
今、私はASP.netとC#で作業しています。GridViewで選択した行にスクロールする方法
私はPageSize = 20(20行)のGridViewを持っています。
ただし、10行しか表示されず、垂直スクロールバーが表示されます。
私の問題は....
ポストバックが発生すると、グリッドの一番上の行にジャンプします。他の行は選択しましたが、私はそれを選択された行にスクロールしたいと思います。どうすればこのことができますか?私を助けてください。
、
は、あなたの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
の値を設定して位置をリセットする必要があります。クライアント側でレンダリングされるまで、ブラウザの行の高さを取得することはできません。