【问题标题】:OnCheckedChange Event does not execute my eventOnCheckedChange 事件不执行我的事件
【发布时间】:2010-11-25 15:20:46
【问题描述】:

我在这里阅读了一些帖子,其中一些与我的问题有关,但由于某种原因,提供的解决方案对我不起作用。基本上我有两个带有复选框的 GridView 控件。它们具有完全相同的代码,但只是触发不同的事件。当然还有不同的 ID 及其相关的唯一信息。这是奇怪的事情,其中​​一个可以正常工作,而另一个不能。我将在此处发布两者,请记住 ID="UnassignElegibilityChk" 的那个是不起作用的。当我从检查中发送回发时,我设置了断点来测试我是否在函数内部。

注意:这两个树视图都在同一个页面上,所以请假设代码隐藏指令和所有设置都正确分配给页面(因为其中一个正在工作,我假设没有问题)

这是不工作的:

   <table><tr><td class="style1">
    <asp:GridView ID="ElegibilitySelectedGridview" runat="server" 
        AutoGenerateColumns="False" DataKeyNames="ID" CellPadding="4" 
        ForeColor="#333333" GridLines="None" Width="475px">
        <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
    <Columns>
        <asp:TemplateField HeaderText="ID">
            <ItemTemplate>
                <asp:Label ID="lblID0" runat="server" Text='<%# Bind("ID") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Select">
            <ItemTemplate>
                <asp:CheckBox ID="UnassignElegibilityChk" runat="server"  AutoPostBack="true" OnCheckedChanged="UnAssignElegibilityRecord"/>
            </ItemTemplate>                   
        </asp:TemplateField>
        <asp:boundfield datafield="Name"  HeaderText="Elegible Item" />
        </Columns>
        <EditRowStyle BackColor="#999999" />
        <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
        <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
        <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
        <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
        <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
        <SortedAscendingCellStyle BackColor="#E9E7E2" />
        <SortedAscendingHeaderStyle BackColor="#506C8C" />
        <SortedDescendingCellStyle BackColor="#FFFDF8" />
        <SortedDescendingHeaderStyle BackColor="#6F8DAE" />
    </asp:GridView>
    </td></tr></table>

正在运行的如下:

<table><tr><td class="style1">
<asp:DropDownList ID="ElegibilityGroupDDL" runat="server" AutoPostBack="True" OnSelectedIndexChanged="ElegibilityGroupDDL_SelectedIndexChanged">
    <asp:ListItem Value="0">ROOT</asp:ListItem>
</asp:DropDownList>
</td></tr><tr><td class="style1">
    <asp:TextBox ID="ElegibilityNameTxt" runat="server" Width="464px"></asp:TextBox>
    </td></tr><tr><td class="style1">
    <asp:Button ID="ElegibilitySaveBtn" runat="server" Text="Save Elegibility" />
    &nbsp;</td></tr><tr><td class="style1">
    <asp:Label ID="ElegibilityMsgLbl" runat="server" Text="" style="color: #0066CC"></asp:Label>
    </td></tr><tr style="background:silver"><td class="style1">
    &nbsp;</td></tr><tr><td class="style1">

    <asp:GridView ID="ElegibilityGridView" runat="server" 
        AutoGenerateColumns="False" DataKeyNames="ID" BackColor="White" 
        BorderColor="#DEDFDE" BorderStyle="None" BorderWidth="1px" CellPadding="4" 
        ForeColor="Black" GridLines="Vertical" Width="95%">
        <AlternatingRowStyle BackColor="White" />
    <Columns>
        <asp:TemplateField HeaderText="ID">
            <ItemTemplate>
                <asp:Label ID="lblID" runat="server" Text='<%# Bind("ID") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Select">
            <ItemTemplate>
                <asp:CheckBox ID="AssignElegibilityChk" runat="server" AutoPostBack="true" OnCheckedChanged="AssignElegibility"/>
            </ItemTemplate>                   
        </asp:TemplateField>
        <asp:boundfield datafield="Name"  HeaderText="Elegible Item" />
        </Columns>
        <FooterStyle BackColor="#CCCC99" />
        <HeaderStyle BackColor="#6B696B" Font-Bold="True" ForeColor="White" />
        <PagerStyle BackColor="#F7F7DE" ForeColor="Black" HorizontalAlign="Right" />
        <RowStyle BackColor="#F7F7DE" />
        <SelectedRowStyle BackColor="#CE5D5A" Font-Bold="True" ForeColor="White" />
        <SortedAscendingCellStyle BackColor="#FBFBF2" />
        <SortedAscendingHeaderStyle BackColor="#848384" />
        <SortedDescendingCellStyle BackColor="#EAEAD3" />
        <SortedDescendingHeaderStyle BackColor="#575357" />
    </asp:GridView>
    </td></tr></table>

工作的gridview成功触发了这个函数:

 Public Sub AssignElegibility()
    If Page.IsPostBack Then
        For Each row As GridViewRow In ElegibilityGridView.Rows
            Dim checkbox As CheckBox = CType(row.FindControl("AssignElegibilityChk"), CheckBox)
            'Check if the checkbox is checked.'
            'value in the HtmlInputCheckBox Value property is set as the //value of the delete commands parameter.'
            If checkbox.Checked Then
                ' Retreive the Employee ID'
                Dim lblID As Label = CType(row.FindControl("lblID"), Label)
                Dim elegibilityID As Integer = Convert.ToInt32(lblID.Text)
                Elegibility.AddElegibilityMapping(CInt(Request("ResID")), elegibilityID)
                ElegibilitySelectedItems(CInt(Request("ResID")))
                ElegibilityGroupDDL_SelectedIndexChanged()
            End If
        Next
    End If
End Sub

不工作的应该触发此代码,但事实并非如此。

Public Sub UnAssignElegibilityRecord(ByVal sender As Object, ByVal e As System.EventArgs)
    PrintLine("Inside the sub")
    If Page.IsPostBack Then
        For Each row As GridViewRow In ElegibilitySelectedGridview.Rows
            Dim checkbox As CheckBox = CType(row.FindControl("UnassignElegibilityChk"), CheckBox)
            'Check if the checkbox is checked.'
            'value in the HtmlInputCheckBox Value property is set as the //value of the delete commands parameter.'
            If checkbox.Checked Then
                ' Retreive the Employee ID'
                Dim lblID As Label = CType(row.FindControl("lblID0"), Label)
                Dim elegibilityID As Integer = Convert.ToInt32(lblID.Text)
                Elegibility.RemoveElegibilityMapping(elegibilityID)
                ElegibilitySelectedItems(CInt(Request("ResID")))
                ElegibilityGroupDDL_SelectedIndexChanged()
            End If
        Next
    End If
End Sub

【问题讨论】:

  • @Jovanky - 添加“请帮助”不会让人们更快地回复您。
  • 我的朋友,有些事情是第二天性。请不要注意这些细节。生活简单了很多。享受你的一天!
  • 您没有两个树视图,而是两个网格视图。
  • 您所说的有效方法不接受任何参数似乎很奇怪,但不有效的方法却接受 (sender As Object, e As EventArgs)。这些绝对是正确的方法吗?您的页面声明中有AutoEventWireup="True"吗?
  • @Tim,感谢您的更正(已编辑),@Graham,AutoEventWireup 在我的页面上是错误的(但一个 GridView 工作正常)。至于发送者 As Object, e As EventArgs on the non-working event,这只是试图让它触发但没有发生任何事情,它甚至没有尝试调用事件。

标签: asp.net vb.net treeview autopostback oncheckedchanged


【解决方案1】:

我不知道以下任何方法是否能解决您的问题,但是...

  1. 为什么 CheckedChanged 的​​“工作”处理程序的签名错误?它需要发送者和事件参数。

    protected Sub AssignElegibility(ByVal sender As Object, ByVal e As System.EventArgs)

  2. 为什么要迭代 Gridrows 以获取 Checkbox 和已更改的行?这也有效:

    Dim checkbox As CheckBox = DirectCast(sender,CheckBox)

要获得 Row,您只需要将 Checkbox 的 NamingContainer 转换为 GridViewRow。

Dim row as GridViewRow =DirectCast(checkbox.NamingContainer,GridViewRow)

编辑:您是否在回发时重新绑定 ElegibilitySelectedGridview-Grid? 你应该只在not Page.IsPostback 时这样做,否则事件不会触发。

【讨论】:

  • 嗨,蒂姆,感谢您的帮助,但我已将 (ByVal sender As Object, ByVal e As System.EventArgs) 分配给工作事件,只是为了保持一致性,但它没有改变任何东西。此外,就遍历视图而言,我可以研究一下,一旦我让事件至少触发,我想先集中精力解决这个问题。
  • 你让我感到困惑。您的工作处理程序实际上有错误的签名:Public Sub AssignElegibility()。这应该会导致运行时错误“没有与委托委托子事件处理程序(sender As Object, e As System.EventArgs)兼容的签名”。
  • 好的,蒂姆,但即使没有签名,它也能正常工作。我也采纳了您的建议,并按照您的建议添加了相应的签名。然而,仍然没有结果。所以签名问题现在消失了,因为它现在就在那里。知道为什么没有触发事件吗?
  • 我提到了这一点,因为这种奇怪的行为很明显,并且可能表明存在严重错误或至少您没有提及。顺便说一句,我已经更新了我的答案。
  • 蒂姆,谢谢你一直陪着我。你为我解决了这个问题,我正在重新连接 GridView onpage_load,周围没有任何条件。非常感谢您的帮助!
猜你喜欢
  • 2012-08-25
  • 2018-09-23
  • 1970-01-01
  • 2011-08-12
  • 2018-09-26
  • 1970-01-01
  • 2021-11-20
  • 2011-09-27
  • 2012-10-06
相关资源
最近更新 更多