DropDownList SelectedIndexChanged在Gridview中没有触发! [英] DropDownList SelectedIndexChanged within Gridview not firing!

查看:109
本文介绍了DropDownList SelectedIndexChanged在Gridview中没有触发!的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在寻找一个解决方案一段时间,看到许多帖子告诉我如何做,但是当DropDownList更改时,我无法使我的SelectedIndexChanged事件触发。

I have been looking for a solution to this for a while though and seen many posts that show me how to do it but yet I cannot get my SelectedIndexChanged event to fire when the DropDownList is changed.

DropDownList AutoPostBack设置为True,我还在以下帖子中跟随了代码:
链接到帖子

The DropDownList AutoPostBack is set to True, i've followed code in the below post also: Link to post

这是我的代码:

.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



J。

Thanks for any help. J.

推荐答案

有一些类似的问题(见事件处理程序不使用AddHandler进行触发
将事件分配给Repeater控件中的自定义控件),但是您的特定情况看起来像你正在添加处理程序两次;一次在标记中,一次在数据绑定。

There are some similar questions (see Event handler not firing using AddHandler and Assign an event to a custom control inside a Repeater control), but your particular case looks like you're adding the handler twice; once in the markup, and once on databound.

我会删除RowDataBound事件中的一个(因为它没有做任何事情,因为处理程序将丢失,当你做回帖,事件发生后会添加处理程序)。此外,请确保您的AutoPostBack为@Bala提及。

I'd remove the one in the RowDataBound event (as it's not doing anything, because the handler will be lost when you do post back, and the handler is added after the event would actually fire). Also, make sure you AutoPostBack as @Bala mentions.

这篇关于DropDownList SelectedIndexChanged在Gridview中没有触发!的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆