【问题标题】:grid posts back when checkbox is checked选中复选框时网格回发
【发布时间】:2013-08-22 20:55:24
【问题描述】:

我已经设置了这个网格……一切都很好……除了一个问题……

<asp:GridView runat="server" 
     ID="grdFacetsAssigned" 
     AllowPaging="false" 
     AllowSorting="True" 
     DataKeyNames="lngSystemFacet" 
     OnSelectedIndexChanging="grdFacetsAssigned_SelectedIndexChanging"
         CssClass="table_scroll" 
         AutoGenerateColumns="False" GridLines="None" 
         ShowHeader="false" Width="500px" 
         OnSelectedIndexChanged="grdFacetsAssigned_SelectedIndexChanged"
         ShowFooter="false" PagerSettings-Visible="false" 
         DataSourceID="SM_spStateUpdateReport_FacetAssignList" 
         OnRowCreated="grdFacetsAssigned_RowCreated">
         <RowStyle CssClass="table_row" />
         <Columns>
             <asp:TemplateField Visible="false">
                 <ItemTemplate>
                     <asp:Label ID="lbllngSystemFacetID" runat="server" 
                     Text='<%# Eval("lngSystemFacetID") %>' />
                 </ItemTemplate>
             </asp:TemplateField>
             <asp:BoundField DataField="strSystemSystemFacet" SortExpression="strSystemSystemFacet" 
             ItemStyle-Width="50%" />
             <asp:TemplateField ItemStyle-Width="30%" ItemStyle-HorizontalAlign="Center" 
             SortExpression="bolAssigned">
                 <ItemTemplate>
                     <asp:CheckBox ID="chkFacetAssigned" runat="server" 
                     OnClientClick="alert(this.checked);" 
                     OnCheckedChanged="chkFacetAssigned_CheckedChanged"
                         AutoPostBack="True" Checked='<%# Eval("bolAssigned") %>' />
                 </ItemTemplate>
             </asp:TemplateField>
             <asp:TemplateField SortExpression="intOrder" 
             HeaderText="Display Order" ItemStyle-Width="20%">
                 <ItemTemplate>
                     <asp:Label ID="lblAssignedFacetOrder" runat="server" 
                     Text='<%#DataBinder.Eval(Container.DataItem, "intOrder")%>'></asp:Label>
                     <asp:TextBox ID="txtAssignedFacetOrder" runat="server" 
                     CssClass="gridview_input" 
                     Text='<%#DataBinder.Eval(Container.DataItem, "intOrder")%>' 
                     Visible="False"></asp:TextBox>
                 </ItemTemplate>
             </asp:TemplateField>
         </Columns>
         <SelectedRowStyle CssClass="table_selected_row" />
         <AlternatingRowStyle CssClass="table_alternating_row" />
         <EmptyDataRowStyle CssClass="table_empty" />
         <EmptyDataTemplate>
             No Data
         </EmptyDataTemplate>
     </asp:GridView>

当您单击 chkFacetAssigned 复选框时,会触发相应的事件。该代码从那里运行良好。但是,当复选框被选中时会发生什么......如果未选中该行,则会发生两次回发。第一个回发来自网格,第二个回发来自复选框。两个回发都会导致调用 chkFacetAssigned_CheckedChanged 事件 - 导致代码运行两次而应该只运行一次。我应该注意,如果该行已被选中(复选框所在的行),您将看不到这个额外的回发。有人请帮忙。

没有注册其他事件处理程序或类似的东西。

【问题讨论】:

  • 你能在你的代码前多放一些空格吗?我仍然可以阅读其中的一些内容

标签: c# asp.net gridview


【解决方案1】:

代码的第一行。删除以下内容。

OnSelectedIndexChanging="grdFacetsAssigned_SelectedIndexChanging"

第二行

OnSelectedIndexChanged="grdFacetsAssigned_SelectedIndexChanged"

【讨论】:

  • 我将这些事件用于其他目的。我不明白为什么复选框事件会触发两次,而这些事件可能会触发。然后它再次回发。我知道你要去哪里,但我也需要处理这些事件。
【解决方案2】:

我为此做的是复选框事件处理程序中的一种解决方法...

            if (Page.Request.Params["__EVENTTARGET"].IndexOf("chkFacetAssigned") < 1)
        {
            return;
        }

这确保事件被忽略,除非它响应由复选框而不是网格发起的回发。

【讨论】:

    猜你喜欢
    • 2011-12-11
    • 1970-01-01
    • 1970-01-01
    • 2013-07-31
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-13
    相关资源
    最近更新 更多