2009-06-01 5 views
1

Je crée une liste déroulante dans le code pour une vue de grille. Je veux créer un AddHandler, donc je peux avoir accès à la valeur sélectionnée. Cependant, ici (Rowdatabound) le gestionnaire d'ajout ne se déclenche pas. Comment dois-je m'y prendre?AddHandler ne se déclenche pas dans rowdatabound

Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound 
    ''//------------ Does not fire off add handler ----- 

    Dim deptvalue As String 
    Dim ddlmgr As New DropDownList 

    AddHandler ddlmgr.SelectedIndexChanged, AddressOf ddlmgr_SelectedIndexChanged 

    ddlmgr.AutoPostBack = True 
    ddlmgr.Items.Clear() 
    ddlmgr.Items.Insert(0, "--Select a Manager--") 
    ddlmgr.AppendDataBoundItems = True 
    ddlmgr.DataTextField = "Name" 
    ddlmgr.DataValueField = "number" 
    ddlmgr.DataSource = SqlDataSource2 
    ddlmgr.DataBind() 

    ''//deptvalue = GridView1.Rows(i).Cells(0).Text 
    deptvalue = e.Row.Cells(0).Text 
    ddlmgr.Attributes.Add("onchange", "setDepart('" & deptvalue & "')") 

    If e.Row.RowType <> DataControlRowType.Pager And _ 
     e.Row.RowType <> DataControlRowType.Header And _ 
     e.Row.RowType <> DataControlRowType.Footer Then 
     e.Row.Cells(2).Controls.Add(ddlmgr) 
    End If 
End Sub 

Répondre

2

Cela semble être une façon étrange de faire les choses.

Il semble que vous liez les mêmes données sur chaque événement rowdatabound de la grille. Cela n'est pas nécessaire si les éléments déroulants sont les mêmes dans chaque ligne et ne sont pas affectés par d'autres informations dans la ligne gridview. Au lieu de cela, au chargement de la page je voudrais stocker les données dans un dictionnaire (ressemble à des données de nom/valeur), puis le lier à chaque liste déroulante.

En outre, je ne vois pas pourquoi vous ajoutez dynamiquement la liste déroulante à chaque ligne gridview. Pourquoi ne pas ajouter le contrôle et câbler l'événement OnLoad pour lier les données ci-dessus. Vous pouvez également câbler l'événement OnSelectedIndexChanged comme vous essayez de le faire ci-dessus.

+0

ok, vous êtes certainement sur quelque chose. Au lieu de le faire dynamiquement, j'ai juste ajouté un contrôle. Juste une question de plus ... où pourrais-je ajouter un événement onclick à la liste déroulante? Je dois définir une valeur sur le côté client – Eric

+0

Nevermind, je l'ai eu. – Eric

+1

Eric, pouvez-vous ajouter comment vous avez résolu le problème? – mikemurf22

1

Lorsque le SelectedIndexChanged de votre ddlmgr se déclenche, une nouvelle publication est lancée. Cela signifie que vous travaillez maintenant avec une nouvelle instance de votre classe de page. L'ancien où vous avez précédemment créé le gestionnaire d'événements a disparu.

Pour que l'événement se déclenche lorsque vous le souhaitez, vous devez recréer le contrôle pour la nouvelle publication avant que l'état soit restauré ou que le gestionnaire d'événements ne soit pas rétabli.

Questions connexes