2012-04-10 12 views
0

私はJavaScriptを使用してトリガーできるページ上に非表示のボタンが必要です(__dopostback ...) 私のページにはオブジェクトのリストとドロップダウンリストユーザーにページ上のそれらのオブジェクトをソートする可能性を与える。ButtonClickで動的に作成されたドロップダウンリストの選択項目を変更するには

マイコードは、リストの[データバインド]のドロップダウンリストの現在の値をチェックし、選択したソート方法をリストに適用します。

ユーザーがリストから別のソート方法を選択すると、最初のボタンがトリガーされます。

ユーザーが新しい項目をリストに追加すると、2番目のボタンがトリガーされます。このような場合は、sortmethod "sort2"をドロップダウンリストに自動的に設定する必要があります。

したがって、2番目のボタンをクリックしたときに、ドロップダウンリストのDataBindメソッドで選択した値の値を後で確認できるように、ドロップダウンリストの選択項目を動的に設定する必要があります。 。

私はここで私を助けることができるので、それは何とかしていることを願っています。選択した値を動的に変更することはできません。

私はコントロールに使用しています:最初は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 

私はあなたがここに私を助けるために必要なすべての情報を提供することができます。私はあなたの時間を本当に感謝していますので、これを読む時間を取ってくれてありがとう!

答えて

0

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

$(".myDropDownList").val("sort2"); 
__doPostBack(uniqueIdOfMyButton,''); 
1

あなたのコードでTrackViewStateを手動で呼び出す理由はありません。 特別な理由はありますか?それ以外の場合は削除します。これは、任意の助けになることができるかどう

は知らないが、私は2つの次の行を使用する傾向がある(C#のユーザーとして、私はそれがすべての違いを確認しないと思います):代わりに

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

of:

sortMethod.SelectedIndex = sortMethod.Items.IndexOf(sortMethod.Items.FindByValue("sort2")) 
+0

こんにちは、ありがとうございましたが、最終的にjqueryを使用して選択した項目を設定しました。ポストバックでリストが空であるため、私は自分のコードでtrackviewstateを持っていますか?私はそれについてはわからないが、それは私のために働く...私はそれを削除するときにエラーがある.. – ThdK

関連する問題