2009-06-01 7 views
1

Ich erstelle eine Dropdown-Liste in Code für eine Gridview. Ich möchte einen AddHandler erstellen, damit ich auf den ausgewählten Wert zugreifen kann. Hier (Rowdatabound) wird der Add-Handler jedoch nicht abgefeuert. Wie soll ich das machen?AddHandler feuert nicht in 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 

Antwort

2

Dies scheint eine seltsame Art, Dinge zu tun.

Es sieht so aus, als ob Sie dieselben Daten für jedes rowdatabound-Ereignis der Gridview binden. Dies ist nicht erforderlich, wenn die Dropdown-Elemente in jeder Zeile identisch sind und nicht durch andere Informationen in der Gridview-Zeile beeinflusst werden. Stattdessen würde ich beim Laden der Daten die Daten in einem Wörterbuch speichern (sieht aus wie Name/Wert-Daten) und binden sie dann an jede Dropdown-Liste.

Außerdem kann ich nicht sehen, warum Sie die Dropdown-Liste dynamisch zu jeder Gridview-Zeile hinzufügen. Warum nicht das Steuerelement hinzufügen und das OnLoad-Ereignis verdrahten, um die Daten oben zu binden. Sie können das OnSelectedIndexChanged-Ereignis auch so verkabeln, wie Sie es oben versuchen.

+0

ok, du bist definitiv auf etwas. Anstatt dies dynamisch zu tun, habe ich gerade ein Steuerelement hinzugefügt. Nur noch eine Frage ... wo würde ich ein Onclick-Event zur Drop-Down-Liste hinzufügen? Ich muss einen Wert auf der Client-Seite setzen – Eric

+0

Nevermind, ich habe es. – Eric

+1

Eric, Können Sie bitte hinzufügen, wie Sie das Problem gelöst haben? – mikemurf22

1

Wenn Ihr ddlmgr SelectedIndexChanged ausgelöst wird, wird ein neues Postback initiiert. Das bedeutet, dass Sie jetzt mit einer brandneuen Instanz Ihrer Seitenklasse arbeiten. Der alte, wo Sie zuvor den Event-Handler angelegt hatten, ist weg.

Damit das Ereignis ausgelöst wird, wenn Sie es wünschen, müssen Sie das Steuerelement für das neue Postback neu erstellen, bevor der-Status wiederhergestellt wird, oder der Ereignishandler wird nicht wiederhergestellt.