Как узнать, было ли вызвано событие ObjectDataSource OnSelected для метода select или метода selectcount? - PullRequest
1 голос
/ 26 мая 2010

У меня есть объектный источник данных, который выглядит следующим образом:

<asp:ObjectDataSource ID="obdsList" runat="server" 
EnablePaging="True" SelectCountMethod="GetCountByID" SortParameterName="sortExpression"
    OldValuesParameterFormatString="original_{0}" SelectMethod="GetByID" 
    TypeName="Services.Users" 
    onselected="obdsList_Selected">
    <SelectParameters>
        <asp:QueryStringParameter Name="ID" QueryStringField="ID" 
            Type="Int32" />           
    </SelectParameters>
</asp:ObjectDataSource>

И выбранное событие, подобное этому:

protected void obdsList_Selected(object sender, ObjectDataSourceStatusEventArgs e) {
}

Однако метод события вызывается дважды ... один раз с моим возвращенным списком и один раз с возвращенным счетчиком Int32. Если я хочу привести e.ReturnValue к возвращаемому списку, как мне различить методы count и select? Я могу сделать e.ReturnValue.GetType().ToString(), но это похоже на взлом.

Ответы [ 3 ]

2 голосов
/ 06 сентября 2012

От MSDN :

Свойство ExecutingSelectCount объекта Объект ObjectDataSourceSelectingEventArgs используется для определения Вызван метод select для извлечения данных или подсчета.

Поэтому я считаю, что вам нужно проверить событие OnSelecting, а не событие OnSelected. то есть:

protected void ods_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
{
      if (e.ExecutingSelectCount)
      {
           //select count method is being called
      }
}

Но если вам это действительно нужно в событии OnSelected, то вам может понадобиться временно сохранить e.ExecutingSelectCount или ... просто продолжать проверять тип результата, я думаю ...

2 голосов
/ 14 мая 2011

Я делаю это ...

protected void obdsList_Selected(object sender, ObjectDataSourceStatusEventArgs e)
{
    if (e.ReturnValue != null)
    {
        if (e.ReturnValue.GetType() == typeof(int))
        {
            //e.ReturnValue is the SelectCountMethod value
        }                
    }
}
1 голос
/ 25 июня 2013

Недавно я столкнулся с этой проблемой, и в ходе ряда неясных поисков обнаружил, что причина, по которой я вижу второе выполнение (как SelectMethod, так и SelectCountMethod, указанное в моем ObjectDataSource), заключается в изменении видимости столбец в сетке после привязки данных уже произошел. Оказывается, что любые изменения, внесенные в столбцы, показанные в сетке после его привязки к данным, приведут к повторному выполнению обоих методов ObjectDataSource.

В моем случае я смог переместить код видимости столбца перед вызовом gridview.DataBind(), и второй набор выполнений прекратился. Однако это может оказаться невозможным, если ваши изменения видимости зависят от результатов проверки с привязкой к данным. В этом случае вам нужно будет немного сложнее и креативнее с обработкой второго выполнения.

...