我有一个对象数据源,如下所示:
<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()
,但这似乎是一个黑客。
答案 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)
的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中指定的SelectMethod
和SelectCountMethod
)的原因来自在数据绑定已经发生之后更改gridview中列的可见性。事实证明,在数据绑定之后对gridview中显示的列所做的任何更改都将导致ObjectDataSource重新执行这两种方法。
就我而言,我能够在gridview.DataBind()
调用前移动列可见性代码,并停止第二组执行。但是,如果您的可见性更改取决于数据绑定检查的结果,则可能无法执行此操作。在这种情况下,你将不得不在如何处理第二次执行方面变得更复杂和有创意。