我在一个具有DefaultButton的Panel的页面上有一个GridView控件。当用户编辑行时,我试图让“更新”按钮与Enter键一起使用。用鼠标工作正常。当我点击“更新”时,该行将恢复为查看模式,并显示更新的值。
当GridView位于Panel中时,在按Enter键之前,面板的默认按钮(提交页面)将触发,甚至在处理RowCommand之前,更新将丢失。
当GridView不在Panel中时,Panel中的其他一些看似随机的按钮会触发,但不会触发我的行的EditItemTemplate中的“Update”按钮。具体来说,页面上有一个CalendarExtender,扩展程序的弹出按钮会触发。完全不是我想要的。
如何才能使其正确行事?
以下是我的标记代码的结构:
<asp:Panel ID="Panel1" runat="server" DefaultButton="btnSubmit">
<!--Form with controls-->
<asp:ImageButton ID="btnWSPODateCal" runat="server" />
<!--this button fires when I press enter while editing a grid row:-->
<ajaxToolkit:CalendarExtender ID="CalendarExtender1" runat="server"
TargetControlID="tbPODate" PopupButtonID="btnWSPODateCal" />
<!--more controls-->
<div class="button_row">
<asp:ImageButton ID="btnCancel" runat="server" />
<asp:ImageButton ID="btnSubmit" OnClick="btnSubmit_Click" />
</div>
</asp:Panel>
<asp:GridView runat="server">
<Columns>
<asp:TemplateField>
<EditItemTemplate>
<asp:ImageButton CommandName="MyUpdate"
ID="btnSubmitRow" runat="server"
CommandArgument="<%# ((GridViewRow) Container).DataItemIndex %>" />
答案 0 :(得分:2)
我想我找到了一个非常简单的解决方法。我在这里发布了一个类似问题的答案: Forcing Default button on a gridview
答案 1 :(得分:0)
试一试。这只是猜测。
<asp:GridView runat="server">
<Columns>
<asp:TemplateField>
<EditItemTemplate>
<asp:Panel ID="Panel2" DefaultButton="btnSubmitRow" runat="server">
<asp:ImageButton CommandName="MyUpdate"
ID="btnSubmitRow" runat="server"
CommandArgument="<%# ((GridViewRow) Container).DataItemIndex %>" />
</asp:Panel>
您可能需要在GridView的每个列中放置一个面板。唯一可能是问题的是Panel能够“找到”GridViewRow中的按钮。
你还试过吗?
<asp:Panel ID="Panel2" DefaultButton="btnSubmitRow" runat="server">
<asp:GridView runat="server">
<Columns>
<asp:TemplateField>
<EditItemTemplate>
<asp:ImageButton CommandName="MyUpdate"
ID="btnSubmitRow" runat="server"
CommandArgument="<%# ((GridViewRow) Container).DataItemIndex %>" />
...
</asp:GridView>
</asp:Panel>