Asp.net 如何从ObjectDataSource事件引用数据绑定控件?

Asp.net 如何从ObjectDataSource事件引用数据绑定控件?,asp.net,webforms,objectdatasource,Asp.net,Webforms,Objectdatasource,以DetailsView控件为例,其数据源为ObjectDataSource 通常在DetailsView.ItemUpdated事件中,我会通过强制转换发送者来获取对细节视图的引用: DetailsView dv = (DetailsView)sender; 在某些情况下,有必要在ObjectDataSource.ItemUpdated事件中处理事件。在这种情况下,sender现在属于ObjectDataSource类型。我希望能够编写干净的代码,而不是像硬编码那样 Label label1

DetailsView
控件为例,其数据源为
ObjectDataSource

通常在
DetailsView.ItemUpdated
事件中,我会通过强制转换
发送者来获取对细节视图的引用:

DetailsView dv = (DetailsView)sender;
在某些情况下,有必要在
ObjectDataSource.ItemUpdated
事件中处理事件。在这种情况下,
sender
现在属于
ObjectDataSource
类型。我希望能够编写干净的代码,而不是像硬编码那样

Label label1 = DetailsView1.FindControl("Label1");
我查阅了文档并进行了一些搜索,但找不到如何编写以下代码:

protected void ObjectDataSource1_Inserted(object sender, ObjectDataSourceStatusEventArgs e)
{
   ObjectDataSource ods = (ObjectDataSource)sender;
   DetailsView dv = (DetailsView)ods.SOMETHING_HERE;
}
有人知道我应该在上面代码段中的
某物中放什么吗?

这是因为假设“OnInserted”事件是一个事件,检查返回值或输出参数的值,或者确定插入操作完成后是否引发异常。返回值、输出参数和异常处理属性可从与事件关联的ObjectDatasourceStatuseEventArgs对象获得

这里可以做的就是调用
ObjectDataSource.select()
,在本例中返回视图,但我认为这不是一个好的选择。 您应该检查您的业务逻辑,并尝试在更有意义的地方进行管理

无论如何,您的代码应该如下所示:

ObjectDataSource ods = YourDataSource.select(); 
DetailsView dv = (DetailsView)ods; 

考虑到你提供的例子,我认为这里没有任何东西可以替代。它是与DV链接的ODS,而不是其他方式。另外,一个数据源可以链接到多个数据绑定控件。
据我所知,这根本不可能。

谢谢你的回复。我这样做的原因是因为我有一个自定义编写的
UserControl
,它有一个带有复选框的
TreeView
。它允许用户选择项目应显示的课程/类别。我需要获取此控件的引用,以便在更新主项后可以更新其他数据库表。我已经很容易地解决了这个问题,只需将DetailsView名称硬编码到其中,但我认为可能有一些类似于.Parent或.NamingContainer的属性,我可以将其转换为,这样代码就不会那么脆弱。如果不看代码,很难回答。无论如何,只要存在对对象的引用,您就可以访问其属性:从usercontrol可以访问它包含的控件,从webcontrol可以访问父控件(页面或用户控件)。