Rambler's Top100
Главная
Новости
Статьи
Форумы
Книги
Коды
Сообщество
Блоги
О нас
 

Логин

Email:
  Пароль:

Войти
Зарегистрироваться
Забыл пароль

Поиск

 Искать :
 
Вперед

Активные блоггеры

 clevelus (1)
 Devel (1)
 RredCat (1)
 GreenAsh (2)
 Валерия  (2)
 astra (1)
 Relocation (4)
 i_zx (1)
 Anka (1)
 asel (1)
 nella (1)
 avot (1)
 thejediknight (1)
 Vladimir (1)
 advanta-group (1)
 Sheba (2)
 tsagi (1)
 m-jodo (1)
 siteman07 (1)
 Reg-Su.Ru (1)

 | 

Leach Blog.

Friday, January 11, 2008

Повторное срабатывание OnRowCommand в GridView

Проблема состоит в следующем: у нас есть GridView, в нём есть CommandField, примерно вот так:

<asp:GridView ID="gvAnswerList" runat="server" AutoGenerateColumns="False"                         OnRowCommand="gvAnswerList_RowCommand">
<Columns>
-------------------------------------------------------------
                            <asp:ButtonField ButtonType="Image" ImageUrl="Images/btn_query.gif" Text="Открыть" CommandName="OpenAnswer" />
                        </Columns>
                    </asp:GridView>
Важно то, что у кнопки ButtonType именно "Image", а не "Button", иначе всё было бы хорошо. А в нашем случае происходит двойное срабатывание события OnRowCommand (не регулярно, кстати). Пусть у нас оно выглядит так: [c#]
protected void gvAnswerList_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        switch (e.CommandName)
        {
            case "OpenAnswer":
                //Что-то там сделали
                break;
            default:
                break;
        }
    }
Так вот, двойное срабатывание указанного выше метода - глюк Framework'а, а не кривые руки разработчиков. Покопавшись на буржуйских форумах, я нашёл довольно нестандартное решение: проверять координаты курсора мыши. При втором проходе они пустые (null). Сделать это можно так: [c#]
        if (Request["x"] == null || Request["y"] == null)
        {
            Response.End();
        } 
Этот код нужно прописать в самом начале обработчика. Итак получаем метод без глюков: [c#]
protected void gvAnswerList_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (Request["x"] == null || Request["y"] == null)
        {
            Response.End();
        } 
        switch (e.CommandName)
        {
            case "OpenAnswer":
                //Что-то там сделали
                break;
            default:
                break;
        }
    }


Надеюсь, что такое решение кому нибудь пригодится.

Leach

11 January 2008 13:27  Комментарии (1)

 
Apartments for Rent

Rambler's Top100
Рейтинг@Mail.ru
Идея: Dimon aka Manowar Программирование: Dimon aka Manowar Дизайн: Dan Lebedev
Хостинг от компании Parking.ru
Карта сайта