如何判断是否为selectmethod或selectcount方法调用了ObjectDataSource OnSelected事件?

时间:2010-05-26 18:09:29

标签: c# asp.net c#-3.0 objectdatasource

我有一个对象数据源,如下所示:

<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 个答案:

答案 0 :(得分:2)

我这样做......

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 :(得分:2)

From 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 :(得分:1)

我最近遇到了这个问题并通过一系列模糊的搜索,发现我看到第二次执行(我的ObjectDataSource中指定的SelectMethodSelectCountMethod)的原因来自在数据绑定已经发生之后更改gridview中列的可见性。事实证明,在数据绑定之后对gridview中显示的列所做的任何更改都将导致ObjectDataSource重新执行这两种方法。

就我而言,我能够在gridview.DataBind()调用前移动列可见性代码,并停止第二组执行。但是,如果您的可见性更改取决于数据绑定检查的结果,则可能无法执行此操作。在这种情况下,你将不得不在如何处理第二次执行方面变得更复杂和有创意。