Привязка данных ASP.NET GridView перед обработчиками событий

Я работаю с сеткой, привязанной к ObjectDataSource. В этой сетке есть один столбец с DropDownList (AutoPostBack true) и Rating. Предполагается, что эти элементы управления позволяют пользователю немедленно изменять данные.

В отличие от RowCommand (изменить: в ButtonField), обработчики элементов управления (SelectedIndexChanged и RatingChanged соответственно) срабатывают после привязки данных. Таким образом, у меня либо не будет актуальных данных, либо мне придется снова выполнять привязку, вызывая DataBind. Ни то, ни другое не так уж и круто. Элементы управления не поддерживают строковые команды.

Как лучше всего с этим справиться? Я неправильно понимаю некоторые концепции или обрабатываю неправильные события?

Вот код:

public partial class _Default : System.Web.UI.Page
{
    protected void ObjectDataSource1_ObjectCreating(object sender, ObjectDataSourceEventArgs e)
    {
        e.ObjectInstance = new MyDataSource();
    }

    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        // before selecting with ButtonField
        // after selecting with TemplateField + Control Event
        Debug.WriteLine("Command Handler");
    }

    protected void Unnamed2_Click(object sender, EventArgs e)
    {
        // Button event handler, after selecting
        Debug.WriteLine("Button Click Handler");
    }

    protected void ObjectDataSource1_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
    {
        // Selecting invoked by ASP.NET data binding
        Debug.WriteLine("Selecting");
    }
}

person Matthias Meid    schedule 13.12.2011    source источник
comment
Зачем снова говорить «связать»? когда впервые?   -  person A.B.Cade    schedule 13.12.2011
comment
В первый раз это происходит до того, как сработает обработчик кнопки, вызванный магией привязки данных ASP.NET (честно говоря, я не знаю подробностей, думаю, я покопаюсь). В любом случае: я добавил код, и метод ObjectDataSource1_Selecting применяется перед Unnamed2_Click, который является обработчиком событий моей кнопки.   -  person Matthias Meid    schedule 13.12.2011


Ответы (1)


Вы должны явно указать источник данных и привязать сетку к событию OnLoadComplete страницы.

person shrutyzet    schedule 13.12.2011
comment
Спасибо, но, очевидно, событие Unnamed2 Click вообще не срабатывает. - person Matthias Meid; 14.12.2011