//базовый класс
public class WebControlBase : UserControl
{
// перегружаем тут виртуальные методы по вкусу
}
//класс DAO
public static class DAO
{
public static string[] SelectData()
{
return new string[] { "one", "two", "three" };
}
}
//главная страница
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected override void CreateChildControls()
{
base.CreateChildControls();
Form.Controls.Add(LoadControl("WebUserControl.ascx"));
}
</script>
<html xmlns="
http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
</form>
</body>
</html>
//аscx — наследник WebControlBase
<%@ Control Language="C#" ClassName="WebUserControl" Inherits="WebControlBase" %>
<script runat="server">
</script>
<asp:ObjectDataSource ID="ods1" runat="server" TypeName="DAO" SelectMethod="SelectData"></asp:ObjectDataSource>
<asp:DetailsView ID="dv1" runat="server" DataSourceID="ods1" AutoGenerateDeleteButton="true"></asp:DetailsView>
Если нажать на кнопку Delete — возникнет исключение (DAO слой не содержит нужного метода), которое никак не перехватить в базовом классе WebControlBase
Мысли у меня закончились.. разве что писать своих наследников DetailsView, GridView и тд с нужной реализацией IPostBackEventHandler