0

2 つのリストボックスを含む ASP.NET (VB) ページがあります。標準的なもの - 左のアイテムを選択し、追加ボタンを押すと右に移動します。結果のリストでアイテムを上下に移動するための 2 つのボタンもあります。私の問題は、2 番目から最後の項目 (またはその範囲内のいずれか) に移動してリスト内で下に移動すると、リストがスクロールバーを一番上の位置にリセットすることです。「フォールドの下」にあるかどうかに関係なく、昇格または降格されたアイテムに焦点を合わせたいと思います。

ページ宣言に MaintainScrollPositionOnPostBack があり、ページ全体でうまく機能します。リストボックスには何もしませんが、これは私が探している動作のタイプです。これは、Javascript や AJAX に頼ることなく、VB だけで実行できますか?

アイデアや提案があれば、事前に感謝します。以下のコード スニペット:

If lstToFields.SelectedIndex < lstToFields.Items.Count - 1 Then
    Dim RowNum As Integer = lstToFields.SelectedIndex
    Dim RowVal As ListItem = lstToFields.SelectedItem
    lstToFields.Items.RemoveAt(RowNum)
    lstToFields.Items.Insert(RowNum + 1, RowVal)
    lstToFields.SelectedIndex = RowNum + 1
End If
4

1 に答える 1

0

あなたの問題は、私が最近抱えていた問題と似ているようです。私は、PostBack が問題であり、スクロール位置を JavaScript で処理する必要があると言いがちです。私の解決策は次のとおりです。

ASPX ページに HiddenField を作成して、ScrollBar の現在の位置を保持します。


< asp : HiddenField ID ="hdnScollTop" EnableViewState =true runat="server" />

タグに JavaScript 関数を作成して、スクロール位置を取得および設定する HiddenField から値を保存およびロードします。また、複数選択 ListBox に使用しなければならなかった Updatelist() 関数もありました。

function Updatelist() { //details removed } function GetListBoxScrollPosition(){ var sel = document.getElementById('<%=lstbxStuff.ClientID%>'); var hdnScrollTop = document.getElementById('<%=hdnScollTop.ClientID %>'); hdnScrollTop.innerText=sel.scrollTop; } function SetListBoxScrollPosition(){ var sel = document.getElementById('<%=lstbxStuff.ClientID%>'); var hdnScrollTop = document.getElementById('<%=hdnScollTop.ClientID %>'); sel.scrollTop=hdnScrollTop.value; //not sure why it's in value when I clearly put it in innerText. This is what works. }

Form_Load で JavaScript 関数を登録し、HiddenField 値を初期化します。コード ビハインドの Page_Load で、すべてのスクリプトを設定しました。

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            BindACLs();
            //I use the hidden field to set the lstbxStuff 
            //scroll bar, which will scroll to the top anyway. 
            //This is to avoid a JavaScript error. 
            hdnScollTop.Value = "0";
        }
        else
        {
            lstbxStuff.Focus();
        }
        lstbxACLs.Attributes.Add("onclick", "GetListBoxScrollPosition();Updatelist();");
        lstbxACLs.Attributes.Add("onfocus", "SetListBoxScrollPosition();");


    }
于 2010-10-28T18:14:01.690 に答える