Проблема обновления строки Gridview при нажатии Enter - PullRequest
1 голос
/ 18 июня 2009

У меня есть сетка, которая использует кнопку изображения в качестве кнопки обновления. Когда пользователь редактирует строку, я бы хотел, чтобы пользователь мог обновить строку, нажав Enter. У меня проблема в том, что, хотя событие RowCommand запущено, CommandName по-прежнему «Изменить» вместо «Обновить» поэтому мой код обновления никогда не выполняется. Я подключил JavaScript к текстовому полю в обработчике RowDataBound:

 Protected Sub uxShoppingCart_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs)
        If e.Row.RowType = DataControlRowType.DataRow Then
            Dim gvr As GridViewRow = DirectCast(e.Row, GridViewRow)
            If (e.Row.RowState And DataControlRowState.Edit) = DataControlRowState.Edit Then
                Dim edit_Qty As TextBox = DirectCast(gvr.FindControl("edit_Qty"), TextBox)
                Dim uxUpdateButton As ImageButton = DirectCast(gvr.FindControl("uxUpdateButton"), ImageButton)
                uxQty.Attributes.Add("onkeypress", "return clickButton(event,'" & uxUpdateButton.ClientID & "')")
                edit_Qty.Focus()
            End If
        End If
    End Sub

Функция javascript выглядит следующим образом:

function clickButton(e, buttonid) {
    var bt = document.getElementById(buttonid);
    if (typeof bt == 'object') {
        if (navigator.appName.indexOf("Netscape") > (-1)) {
            if (e.keyCode == 13) {
                bt.click();
                return false;
            }
        }
        if (navigator.appName.indexOf("Microsoft Internet Explorer") > (-1)) {
            if (event.keyCode == 13) {
                bt.click();
                return false;
            }
        }
    }
}

А вот и кнопка объявления

<EditItemTemplate>
    <span style="display: inline; white-space: nowrap;">
        <asp:ImageButton ID="uxUpdateButton" runat="server" CausesValidation="True" CommandName="Update" ImageUrl="~/images/icons/accept.png" AlternateText="Update" ToolTip="Update"></asp:ImageButton>
        <asp:ImageButton ID="uxCancelButton" runat="server" CausesValidation="False" CommandName="Cancel" ImageUrl="~/images/icons/cancel.png" AlternateText="Cancel" ToolTip="Cancel"></asp:ImageButton>
    </span>
</EditItemTemplate>

Если я нажимаю кнопку обновления с помощью мыши, CommandName «Обновление» передается, как и ожидалось, только не тогда, когда я «щелкаю» его через JavaScript Любая помощь будет оценена.

1 Ответ

0 голосов
/ 23 июня 2009

Я наконец смог вернуться к этому со свежим взглядом. Оказывается, проблема в том, что maskededitextender из ajaxcontroltoolkit я использую с полем. Я предполагаю, что расширитель перехватывает событие onkeypress.

Вот мое решение. Я избавился от maskededitextender и вместо этого использовал прямой javascript и назначил свою функцию javascript событию onkeypress текстового поля:

AddQty.Attributes.Add("onkeypress", "return NumericInput(event,'" & uxAddButton.ClientID & "')") 

А вот и JavaScript:

<script type="text/javascript">
    function NumericInput(e, id) {
        if (!e) e = window.event;
        if (e.keyCode > 31 && (e.keyCode < 48 || e.keyCode > 57)) {
            return false;
        } else {
            if (e.keyCode == 13) {
                var bt = document.getElementById(id);
                if (bt != null) {
                    bt.click();
                    return false;
                }
            }
        }
    } 
 </script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...