0

私はこのグリッドをセットアップしました....それはすべて完全に正常に動作します...1つの問題を除いて...

<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 チェックボックスをクリックすると、適切なイベントが発生します。コードはそこからうまく機能します。ただし、チェックボックスがチェックされている場合は...行が選択されていない場合、2つのポストバックが発生します。最初のポストバックはグリッドからのもので、2 番目のポストバックはチェックボックスからのものです。両方のポストバックにより、chkFacetAssigned_CheckedChanged イベントが呼び出され、1 回だけ実行されるはずのコードが 2 回実行されます。行が既に選択されている場合 (チェックボックスがオンになっている行)、この余分なポストバックは表示されないことに注意してください。誰か助けてください。

他に登録されているイベント ハンドラなどはありません。

4

2 に答える 2

1

コードの最初の行。以下を削除します。

OnSelectedIndexChanging="grdFacetsAssigned_SelectedIndexChanging"

二行目

OnSelectedIndexChanged="grdFacetsAssigned_SelectedIndexChanged"
于 2013-08-22T21:04:29.567 に答える
0

これに対して私がしたことは、チェックボックスイベントハンドラーの回避策でした...

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

これにより、グリッドではなくチェックボックスによって開始されたポストバックに応答しない限り、イベントは無視されます。

于 2013-08-23T14:21:14.857 に答える