События обратной передачи из DataView

Я представляю информацию из DataTable на своей странице и хотел бы добавить некоторые функции сортировки, которые немного выходят за рамки прямой сортировки столбцов. Таким образом, я пытался поместить LinkButtons в HeaderItems моего GridView, которые возвращаются к функциям, которые изменяют информацию о сеансе перед перезагрузкой страницы.

Щелчок по моим ссылкам ДЕЙСТВИТЕЛЬНО вызывает обратную передачу, но они, похоже, не генерируют никаких событий OnClick, поскольку мои функции OnClick не выполняются. . У меня AutoEventWireup установлено значение true, и если я перемещаю ссылки из GridView, они работают нормально.

Я обошел проблему, создав обычные привязки, добавив запросы к их hrefs и проверив их при загрузке страницы, но я бы предпочел, чтобы С# выполнял тяжелую работу. Любые идеи?

Обновление: чтобы уточнить, что идентификаторы элементов управления соответствуют именам их функций OnClick.


person Evil Andy    schedule 05.09.2008    source источник


Ответы (3)


Вы на правильном пути, но попробуйте поработать с именем команды/аргументом LinkButton. Попробуйте что-то вроде этого:

В HeaderTemplate TemplateField добавьте LinkButton и установите CommandName и CommandArgument.

<HeaderTemplate> 
    <asp:LinkButton ID="LinkButton1" runat="server" CommandName="sort" CommandArgument="Products" Text="<%# Bind('ProductName")' />
</HeaderTemplate>

Затем установите событие RowCommand для GridView.

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "sort")
    {
        //Now sort by e.CommandArgument

    }
}

Таким образом, вы полностью контролируете свои LinkButtons, и вам не нужно много работать, чтобы отслеживать их.

person NakedBrunch    schedule 05.09.2008

При использовании событий в динамически генерируемых элементах управления в ASP.Net следует помнить о двух вещах:

  • Во-первых, элементы управления в идеале должны создаваться в обработчике событий Page.Init. Это необходимо для того, чтобы элементы управления были созданы до запуска кода обработки событий.
  • Во-вторых, вы должны присвоить то же значение свойству идентификатора элемента управления, чтобы код обработчика событий знал, что это элемент управления, который должен обрабатывать событие.
person samjudson    schedule 05.09.2008

Вы можете указать метод, который будет вызываться при нажатии на ссылку.

<HeaderTemplate>
    <asp:LinkButton
        ID="lnkHdr1"
        Text="Hdr1"
        OnCommand="lnkHdr1_OnCommand"
        CommandArgument="Hdr1"
        runat="server"></asp:LinkButton>
</HeaderTemplate>

Код позади:

protected void lnkHdr1_OnCommand(object sender, CommandEventArgs e)
{
    // e.CommandArgument
}
person Eric Z Beard    schedule 05.09.2008