その中に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内のボタンをクリックしても、イベントは発生しません。何か案が?
私は次のことをしました、そしてそれは働きます
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
}
}
}
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" />
OnClickのある列ボタンがポストバックを引き起こしていたのにOnClickメソッドがヒットしなかったという同じ問題がありました。更新パネルをコメントアウトすると、すべて機能しました。
更新パネル内にグリッドのポストバックトリガーを追加することで、この問題を解決しました。
</ContentTemplate>
<Triggers>
<asp:PostBackTrigger ControlID="uxWebDataGrid" />
</Triggers>
</asp:UpdatePanel>
これが他の誰かに役立つことを願っています!
同様の問題がありました。
状況に応じて、私のように...更新パネル内のクリック可能なすべてのコントロールをトリガーにします。そのため、UpdatePanelプロパティ 'ChildrenAsTriggers = "true"'を使用するだけで、問題を解決できました。
<asp:UpdatePanel runat="server" ID="UPCommunicationlogForm" ChildrenAsTriggers="true" >
これで問題が解決し、グリッドビュー内のItemTemplateから生成された編集ボタンと削除ボタンがサーバー上のそれぞれのメソッドを呼び出すようになりました。
これは、コードビハインドのコマンドのイベントハンドラーになります。
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"を追加する必要があります
これは私を助けました。私の場合、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>
このコードをUpdatePanelに追加してください。
</ContentTemplate>
<Triggers>
<asp:PostBackTrigger ControlID="gvPrList" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
OnRowCommandイベントを追加し、このトリガーをUpdatePanelに追加しました。
<Triggers>
<asp:AsyncPostBackTrigger ControlID="gvPrList" EventName="RowCommand" />
</Triggers>
これは非同期トリガーであることに注意してください。