2016-08-22 38 views
0

私はオンラインで回答を探しましたが、何の答えも見つかりませんでした。私は、UpdatePanelとLinkbutton列の中にGridViewを持っていて、Bootstrapモーダルで詳細を表示しています。ユーザーがLinkBut​​tonをクリックしたときにイベントOnClickが発生しないという問題がありました.JavascriptでfClickを作成し、別のLinkBut​​tonのクリックによってOnClickイベントが発生するという問題を解決しました。UpdatePanel内のASP.NET GridViewは、2回目のクリックまで更新されません。

これで正常に動作しますが、2回目のクリックまでは何も変わりません。

ASP.NETコード

<asp:UpdatePanel ID="upContent" runat="server" UpdateMode="Conditional"> 
    <ContentTemplate> 
     <table align="center"> 
      <tr> 
       <td> 
        <asp:GridView ID="grvOrderTracing" runat="server" EmptyDataText="There are no pending orders for the selected date" AutoGenerateColumns="False" DataSourceID="SqlDTSgetOrdersByDate" CssClass="table table-striped table-hover table-responsive" GridLines="None" AllowPaging="True" PageSize="8" > 
         <PagerStyle CssClass="pagination-ys" /> 
         <Columns> 
          <asp:BoundField DataField="Order ID" HeaderText="Order ID" SortExpression="Order ID" > 
           <ControlStyle CssClass="hide" /> 
           <FooterStyle CssClass="hide" /> 
           <HeaderStyle CssClass="hide" /> 
           <ItemStyle CssClass="hide" /> 
          </asp:BoundField> 
          <asp:TemplateField HeaderText="Order Number"> 
           <ItemTemplate> 
            <asp:LinkButton ID="lbtShowMoreInfo" runat="server" data-toggle="modal" data-target="#showLog" CommandName="OrderID" Text='<%# Bind("[Order Number]") %>' style="cursor: pointer; font-weight: bold;" OnClientClick="ActivityLog(this);"> 
            </asp:LinkButton> 
            <asp:LinkButton ID="lbtActivityLog" runat="server" CommandName="OrderID" CssClass="hide" OnClick="ActivityLog_Click" Text='<%# Bind("[Order ID]") %>' ></asp:LinkButton> 
           </ItemTemplate> 
          </asp:TemplateField> 
         </Columns> 
        </asp:GridView> 
        <asp:SqlDataSource ID="SqlDTSgetOrdersByDate" runat="server" ConnectionString="<%$ ConnectionStrings:DefaultConnection %>" SelectCommand="sp_getOrdersByDate" SelectCommandType="StoredProcedure" CancelSelectOnNullParameter="False"> 
         <SelectParameters> 
          <asp:Parameter DefaultValue="0" Name="filter" Type="Int32" /> 
          <asp:Parameter Name="startDate" Type="String" /> 
          <asp:Parameter Name="endDate" Type="String" /> 
         </SelectParameters> 
        </asp:SqlDataSource> 
       </td> 
      </tr> 
     </table> 
    </ContentTemplate> 
</asp:UpdatePanel> 

<asp:UpdatePanel ID="upLog" runat="server" UpdateMode="Conditional"> 
    <ContentTemplate> 
     <!-- Modal --> 
     <div id="showLog" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" data-backdrop="static" data-keyboard="false"> 
      <div class="modal-dialog modal-lg" > 
       <div class="modal-content"> 
        <div class="modal-header"> 
         <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button> 
         <h4 class="modal-title" id="myModalLabel">Orden Log</h4> 
        </div> 
        <div class="modal-body"> 
         <asp:GridView ID="grvLog" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDTSgetTracing" CssClass="table table-striped table-hover table-responsive" GridLines="None" > 
          <Columns> 
           <asp:BoundField DataField="Movement Date" HeaderText="Movement Date" SortExpression="Movement Date" ReadOnly="true" DataFormatString="{0:dd/MM/yyyy HH:mm}" /> 
           <asp:BoundField DataField="User" HeaderText="User" SortExpression="User" ReadOnly="true" /> 
           <asp:BoundField DataField="Action" HeaderText="Action" SortExpression="Action" ReadOnly="true" /> 
           <asp:BoundField DataField="Comments" HeaderText="Comments" SortExpression="Comments"/> 
          </Columns> 
         </asp:GridView> 
         <asp:SqlDataSource ID="SqlDTSgetTracing" runat="server" ConnectionString="<%$ ConnectionStrings:DefaultConnection %>" SelectCommand="sp_getTracing" SelectCommandType="StoredProcedure"> 
          <SelectParameters> 
           <asp:Parameter DefaultValue="0" Name="ord_id" Type="Int32"/> 
          </SelectParameters> 
         </asp:SqlDataSource> 
        </div> 
       </div> 
      </div> 
     </div> 
    </ContentTemplate> 
</asp:UpdatePanel> 

Javascriptコード

function ActivityLog(lbt) { 
    lbt.nextSibling.nextSibling.click(); //Find the other LinkButton and click 
} 

C#コード

protected void ActivityLog_Click(object sender, EventArgs e) 
{ 
    SqlDTSgetTracing.SelectParameters["ord_id"].DefaultValue = ((LinkButton)sender).Text; 
    SqlDTSgetTracing.Select(DataSourceSelectArguments.Empty); 
    grvLog.DataBind(); 
    upLog.Update(); 
} 

When clicking the first time

When clicnking the seccond time

2回クリックすると、データがGridViewに表示されます。

最初のクリックからGridViewに表示されるデータが必要です。

答えて

1

OnClientClickの末尾にreturn false;を追加して、そのコントロールのクリックイベント(ASP.NETによってコード化されています)が実行されないようにすることをお勧めします。これにより、LinkButtonのみが確実にポストバックされます。

OnClientClick="ActivityLog(this);return false;" 

クリックが2回あるかどうかは分かりませんが、多分!

+0

回答ありがとうございました。 OnClientClickの最後まで、グリッドビューを更新するには2回クリックする必要があります。 –

+0

私はそれがタイミングの問題だと思っています...ページの現在のHTMLを持つモーダルを最初にクリックすると(データは含まれません)、ポストバックが発生している可能性がありますが、 2番目のボタンが押されるまで「見なさい」。最初のLinkBut​​tonから 'data-toggle'と' data-target'を削除し、 'UpdatePanel'の' endRequest'関数を使います(http://stackoverflow.com/questions/5269912/begin-and-endを参照)。 -request-in-updatepanel-jquery)を使用します。その関数は次のようにモーダルを表示します: '$( '#showLog')。modal();'希望を助け、あなたを正しい道に導きます。 – scolja

+0

BTW - 上記のメソッドは、あなたが二重の 'LinkBut​​ton'ソリューションを取り除くことを可能にし、最初の' LinkBut​​ton'はあなたが望むようにポストバックできます...モーダルの設定と表示は 'endRequest'メソッド。 – scolja

関連する問題