update trigger net for eventname dropdownlist asyncpostbacktrigger asp asp.net vb.net drop-down-menu selectedindexchanged

asp.net - trigger - update panel asp net dropdownlist



DropDownList SelectedIndexChanged dentro de Gridview no se activa! (2)

He estado buscando una solución para esto por un tiempo y he visto muchas publicaciones que me muestran cómo hacerlo pero aún no puedo hacer que mi evento SelectedIndexChanged se active cuando se cambia DropDownList.

DropDownList AutoPostBack está establecido en True, también he seguido el código en la siguiente publicación: Enlace a la publicación

Aquí está mi código:

.ASPX

<asp:GridView ID="gvCases" DataKeyNames="UserId" runat="server" AutoGenerateColumns="False" BorderWidth="0px" CssClass="gridList" GridLines="None"> <AlternatingRowStyle BackColor="#F7F7F7" /> <Columns> <asp:BoundField DataField="id" HeaderText="Case Ref" /> <asp:TemplateField HeaderText="Name"> <ItemTemplate> <asp:Label ID="clientName" runat="server" Text="Label"></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:BoundField DataField="company" HeaderText="Company" /> <asp:TemplateField HeaderText="Order Date"> <ItemTemplate> <asp:Label ID="dateTime" runat="server" Text="Label"></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Case Owner"> <ItemTemplate> <asp:DropDownList ID="iconUsers" runat="server" OnSelectedIndexChanged="iconUsers_SelectedIndexChanged"> </asp:DropDownList> </ItemTemplate> </asp:TemplateField> <asp:TemplateField ShowHeader="False"> <ItemTemplate> <asp:Button ID="btnDetails" runat="server" CausesValidation="False" Text="Details" /> </ItemTemplate> </asp:TemplateField> <asp:TemplateField ShowHeader="False"> <ItemTemplate> <asp:Button ID="btnSchedule" runat="server" CausesValidation="False" Text="Schedule" /> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView>

.VB

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If (Request.IsAuthenticated = False) Then Response.Redirect("~/admin/default.aspx") End If Dim keypadSQL As SqlConnection = New SqlConnection() keypadSQL.ConnectionString = ConfigurationManager.ConnectionStrings("connKeypad").ConnectionString() Dim cmdActive As SqlCommand = New SqlCommand() cmdActive.Connection = keypadSQL cmdActive.CommandText = "spCasesActive" cmdActive.CommandType = CommandType.StoredProcedure Dim daCases As SqlDataAdapter = New SqlDataAdapter daCases.SelectCommand = cmdActive Dim dsCases As DataSet = New DataSet() daCases.Fill(dsCases, "CaseList") Dim CaseTotal As Integer CaseTotal = dsCases.Tables(0).Rows.Count If CaseTotal = 1 Then iCaseTotal.InnerHtml = CaseTotal & " Case" Else iCaseTotal.InnerHtml = CaseTotal & " Cases" End If gvCases.DataSource = dsCases gvCases.DataBind() cmdActive.Dispose() If Page.IsPostBack Then End If End Sub Protected Sub gvCases_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gvCases.RowDataBound If e.Row.RowType = DataControlRowType.Header Then gvCases.Columns(5).ItemStyle.Width() = "60" gvCases.Columns(6).ItemStyle.Width() = "70" End If If e.Row.RowType = DataControlRowType.DataRow Then Dim rowView As DataRowView = CType(e.Row.DataItem, DataRowView) Dim strClientName As String Dim clientName As Label strClientName = rowView("firstname") & " " & rowView("lastname") clientName = CType(e.Row.FindControl("clientName"), Label) clientName.Text = strClientName Dim strDateTime As String Dim dateTime As Label strDateTime = rowView("CaseSent") dateTime = CType(e.Row.FindControl("dateTime"), Label) dateTime.Text = FormatDateTime(strDateTime, DateFormat.ShortDate) & "<br />" & FormatDateTime(strDateTime, DateFormat.ShortTime) gvCases.Columns(3).ItemStyle.Font.Size = 8 gvCases.Columns(5).ControlStyle.CssClass = "btnEdit" gvCases.Columns(6).ControlStyle.CssClass = "btnSchedule" Dim intUserId As String intUserId = Convert.ToString(gvCases.DataKeys(e.Row.RowIndex).Value) Dim cmd As New SqlCommand("SELECT id, Firstname, Lastname, Firstname + '' '' + Lastname As FullName FROM [users_icon] ORDER BY Firstname, Lastname", New SqlConnection(ConfigurationManager.ConnectionStrings("connKeypad").ConnectionString())) cmd.Connection.Open() Dim ddlValues As SqlDataReader ddlValues = cmd.ExecuteReader() Dim iconUsers As DropDownList iconUsers = CType(e.Row.FindControl("iconUsers"), DropDownList) iconUsers.Style.Add("font-size", "11px") iconUsers.DataSource = ddlValues iconUsers.DataValueField = "id" iconUsers.DataTextField = "FullName" iconUsers.DataBind() Dim ListItem1 = New ListItem("Select Case Owner", "0") iconUsers.Items.Insert("0", ListItem1) iconUsers.AutoPostBack = True If IsDBNull(rowView("CaseOwner")) Then iconUsers.SelectedValue = 0 Else iconUsers.SelectedValue = rowView("CaseOwner") End If AddHandler iconUsers.SelectedIndexChanged, AddressOf iconUsers_SelectedIndexChanged cmd.Connection.Close() cmd.Connection.Dispose() Dim btnDetails As Button = CType(e.Row.FindControl("btnDetails"), Button) btnDetails.PostBackUrl = "~/admin/detail.aspx?uid=" & intUserId Dim LabelAddress As Button = CType(e.Row.FindControl("btnSchedule"), Button) LabelAddress.PostBackUrl = "~/admin/schedule.aspx?uid=" & intUserId End If End Sub Protected Sub iconUsers_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Response.Write("Function Called") End Sub

Gracias por cualquier ayuda. J.


Usted dice que AutoPostBack está establecido en true pero no lo veo en el marcado y de manera predeterminada está configurado en falso. Entonces intenta

<asp:DropDownList ID="iconUsers" runat="server" OnSelectedIndexChanged="iconUsers_SelectedIndexChanged" AutoPostBack="true"> </asp:DropDownList>


Hay algunas preguntas similares (consulte Controlador de eventos que no se activa con AddHandler y Asignar un evento a un control personalizado dentro de un control Repeater ), pero su caso particular parece que está agregando el controlador dos veces; una vez en el marcado, y una vez en databound.

Me gustaría eliminar el que está en el evento RowDataBound (ya que no está haciendo nada, porque el controlador se perderá cuando se publique de nuevo, y el controlador se agrega después de que el evento realmente se dispara). Además, asegúrese de que AutoPostBack como @Bala menciona.