web-dev-qa-db-ja.com

UpdatePanel内でのGridViewの使用

その中にUpdatepanelとGridviewがあります。

<asp:UpdatePanel ID="uplPanel" UpdateMode="Conditional" runat="server" OnLoad="uplPanel_Load">
<ContentTemplate>
 <asp:GridView ID="gvPrList" runat="server" AutoGenerateColumns="false" AllowPaging="false"
       AllowSorting="false" CssClass="list-table" HeaderStyle-CssClass="header">
       <Columns>
     <ItemTemplate>
               <asp:Button ID="btnEdit" runat="server" Text="Edit" CssClass="button save" OnCommand="onPrItemCmd"
                   CommandName="editRow" CommandArgument='<%#Bind("ID") %>' Style="width: 80px" />
               <asp:Button ID="btnDelete" runat="server" Text="Delete" CssClass="button save" OnCommand="onPrItemCmd"
                   CommandName="deleteRow" CommandArgument='<%#Bind("ID") %>' Style="width: 80px" />
           </ItemTemplate>
       </asp:TemplateField>
   </Columns>

Griview内のボタンをクリックしても、イベントは発生しません。何か案が?

8
vml19

私は次のことをしました、そしてそれは働きます

Aspボタンをhtmlボタンに置​​き換え、javascriptメソッドを呼び出してUpdate PanalLoadイベントを発生させます。

<input id="btnDelete1" type="button" onclick="javascript:DeletePrItem('<%# Eval("ID") %>');" value="Delete" class="button save" style="width: 80px" />

私のJs:

    function DeletePrItem(_Id) {
        __doPostBack('<%= uplPanel.ClientID %>', _Id);
    }

背後にある私のコード:

    protected void uplPanel_Load(object sender, EventArgs e)
    {
        var arg = Request.Params.Get("__EVENTARGUMENT");

        if (arg != null)
        {
            if (arg != "")
            {
                string recordId = arg.ToString();
                //Do deletetion and rebind data grid

    }
     }
}
2
vml19

GridViewのOnCommandイベントを追加し、そのイベント内で次のように処理する必要があります。

OnRowCommand="gvPrList_OnRowCommand" 

または、個々のボタンのクリックイベントを追加して、コードビハインドファイルで処理します。

<asp:Button ID="btnEdit" runat="server" OnClick="btnEdit_Click" Text="Edit" CssClass="button save"
                   OnCommand="onPrItemCmd" CommandName="editRow" CommandArgument='<%#Bind("ID") %>' Style="width: 80px" />
5
Naveed Butt

OnClickのある列ボタンがポストバックを引き起こしていたのにOnClickメソッドがヒットしなかったという同じ問題がありました。更新パネルをコメントアウトすると、すべて機能しました。

更新パネル内にグリッドのポストバックトリガーを追加することで、この問題を解決しました。

</ContentTemplate>
   <Triggers>
       <asp:PostBackTrigger ControlID="uxWebDataGrid" />
   </Triggers>
</asp:UpdatePanel>

これが他の誰かに役立つことを願っています!

2
John

同様の問題がありました。

状況に応じて、私のように...更新パネル内のクリック可能なすべてのコントロールをトリガーにします。そのため、UpdatePanelプロパティ 'ChildrenAsTriggers = "true"'を使用するだけで、問題を解決できました。

    <asp:UpdatePanel runat="server" ID="UPCommunicationlogForm" ChildrenAsTriggers="true" >

これで問題が解決し、グリッドビュー内のItemTemplateから生成された編集ボタンと削除ボタンがサーバー上のそれぞれのメソッドを呼び出すようになりました。

1
user2784648

これは、コードビハインドのコマンドのイベントハンドラーになります。

protected void onPrItemCmd(object sender, CommandEventArgs e)
    {
        //do whatever you want
        //probably you will need the "ID" or "CommandArgument":
        string myArgumentID = e.CommandArgument.ToString();

        uplPanel.Update(); //since the UpdatePanel is set *UpdateMode="Conditional"*
    }

更新:

おそらく、ボタンをクリックしたときに何らかの検証を行っている可能性があります。その場合は、ボタンまたはリンクのプロパティにCausesValidation = "false"を追加する必要があります

0
aleafonso

これは私を助けました。私の場合、asp:DropDownListコントロールの値を変更してから、サーバーに戻って、別のasp:UpdatePanelにあるasp:GridViewを更新していました。更新パネルをリストで更新するコードを追加するのを忘れました。私がそれをしたら、すべてがうまくいきました。

サーバ側

System.Data.DataSet ds = MySQL.DAL.GetRecord(sql);
GV_View.DataSource = ds;
GV_View.DataBind();
UP_MainList.Update(); //refresh the update panel

Aspxコード

            <asp:UpdatePanel runat="server" ID="UP_ListChange" UpdateMode="Conditional">
                <ContentTemplate>
                    <asp:DropDownList runat="server" ID="ddFilter" DataTextField="Desc" AutoPostBack="true" DataValueField="Detail" OnSelectedIndexChanged="GV_CodeView_RefreshScreen" ></asp:DropDownList>
                </ContentTemplate>
             </asp:UpdatePanel>
            <div class="medium">Select Filter to view database codes</div>
        </div>
        <div class="div-row-header" runat="server" id="divList">
        <asp:UpdatePanel runat="server" ID="UP_MainList" UpdateMode="Conditional">
        <ContentTemplate>
            <asp:GridView ID="GV_View" runat="server" AllowSorting="True" AutoGenerateColumns="false" DataKeyNames="id">
                <Columns>
                    <asp:BoundField DataField="Id" HeaderText="Id" Visible="false" />
                    <asp:BoundField DataField="Type_Cd" HeaderText="Code" />
                    <asp:BoundField DataField="Short_Desc" HeaderText=" Description" />
                    <asp:TemplateField HeaderText="">
                        <ItemTemplate>
                            <asp:Button ID="Code_Edit" runat="server" Text="Edit" onClick="GV_Code_Edit_Click" class="button" />
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>             
        </ContentTemplate>

        </asp:UpdatePanel>
        </div>
0
code-it

このコードをUpdatePanelに追加してください。

</ContentTemplate> 
 <Triggers>
   <asp:PostBackTrigger ControlID="gvPrList" EventName="Click" />
 </Triggers>
 </asp:UpdatePanel>
0
Ruruboy

OnRowCommandイベントを追加し、このトリガーをUpdatePanelに追加しました。

<Triggers>
    <asp:AsyncPostBackTrigger ControlID="gvPrList" EventName="RowCommand" />
</Triggers>

これは非同期トリガーであることに注意してください。

0
Filipe Leal