0

JavaScript (__dopostback...) を使用してトリガーできるページ上のボタンを非表示にする必要があります。また、ページ上のオブジェクトのリストと、ページ上のそれらのオブジェクトを並べ替える可能性をユーザーに提供するドロップダウンリストもあります。

私のコードは、リストの Databind でドロップダウンリストの現在の値をチェックし、選択した並べ替え方法をリストに適用します。

最初のボタンは、ユーザーがリストから別の並べ替え方法を選択したときにトリガーされます。

2 番目のボタンは、ユーザーが新しいアイテムをリストに追加したときにトリガーされます。これが発生した場合、ドロップダウンリストでソートメソッド「sort2」が自動的に設定されます。

したがって、2 番目のボタンがクリックされたときに、ドロップダウン リストの選択した項目を動的に設定する必要があります。これにより、後でドロップダウン リストの DataBind メソッドで選択した値の値を確認し、どの並べ替え方法を適用する必要があるかを知ることができます。

ここで私を助けてくれるので、それがどういうわけか明確になることを願っています。選択した値を動的に変更できません。

私はコントロールに使用しています: 1 つ目は objects.vb で、2 つ目は ObjectContainer.vb です。Objects.vb には、ドロップダウン リストと objectcontainer のインスタンスの 2 つのボタンが含まれています。objectcontainer には、オブジェクト コントロールで選択された値に基づいて並べ替える必要があるオブジェクトのリストが含まれています。

Objects.vb:

Private sortMethod As DropdownList
Private container as ObjectContainer

Protected Overrides Sub OnInit(ByVal e As System.EventArgs)
                MyBase.OnInit(e)
                EnsureChildControls()  
 End Sub

Protected Overrides Sub CreateChildControls()
        MyBase.CreateChildControls()

        ' Add sorting
        sortMethod = New DropDownList()
        sortMethod.ID = "sortlist"

        CType(sortMethod.Items, IStateManager).TrackViewState()

        If Not Page.IsPostBack Then
            Dim sort1 As New ListItem()
            sort1.Text = "Sort Method 1"
            sort1.Value = "sort1"
            Dim sort2 As New ListItem()
            sort2.Text = "Sort Method 2"
            sort2.Value = "sort2"
            Dim sort3 As New ListItem()
            sort3.Text = "Sort Method 3"
            sort3.Value = "sort3"       

            sortMethod.Items.Add(sort1)
            sortMethod.Items.Add(sort2)
            sortMethod.Items.Add(sort3)

            sortMethod.AutoPostBack = False
            sortMethod.EnableViewState = True

            sortMethod.Attributes.Add("onchange", "javascript:TriggerPostbackButtonUpdate()")
        End If

        Me.Controls.Add(sortMethod)

container = New ObjectContainer
            container.ID = "oc"

            Me.Controls.Add(container)

    End Sub

        Protected Sub ButtonUpdate_Click(ByVal sender As Object, ByVal e As System.EventArgs)
            container.SortMethodAndOrder = sortMethod.SelectedValue
            container.DataBind()
        End Sub

            'when this event is triggered, the "sort2" item should be selected after the postback
        Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs)                
            sortMethod.SelectedIndex = sortMethod.Items.IndexOf(sortMethod.Items.FindByValue("sort2"))    
            container.SortMethodAndOrder = "sort2"
            container.DataBind()
        End Sub

ObjectContainer.vb:

Public Overloads Overrides Sub DataBind()

        EnsureChildControls()

        Dim objects As ObjectsCollection = Nothing


        If objects.Count <> 0 Then


            Dim sortList As DropDownList = DirectCast(Me.Parent.FindControl("sortlist"), DropDownList)
            If sortList IsNot Nothing Then

               'sort based on the selected value in the dropdownlist

            End If

        End If
  End Sub

ここで私を助けるために必要な情報を提供できます。お時間を割いていただき、本当にありがとうございます。

4

2 に答える 2

1

コードで TrackViewState を手動で呼び出す理由がわかりません。それを呼び出す特定の理由はありますか?そうでなければ、私はそれを削除します。

これが役立つかどうかはわかりませんが、私は次の2行を使用する傾向があります(C#ユーザーとしてですが、違いはないと思います):

sortMethod.ClearSelection()
sortMethod.Items.FindByValue("sort2").Selected = true

それ以外の :

sortMethod.SelectedIndex = sortMethod.Items.IndexOf(sortMethod.Items.FindByValue("sort2"))
于 2012-04-10T11:33:29.500 に答える
0

ポストバックをトリガーする前に、id が jquery を使用してドロップダウンリストの選択された値を設定する方法を次に示します。

 $(".myDropDownList").val("sort2");
 __doPostBack(uniqueIdOfMyButton,'');
于 2012-04-11T06:55:07.040 に答える