Welcome 微信登录

首页 / 网页编程 / ASP.NET / ASP.NET控件开发基础(22)

ASP.NET控件开发基础(22)2011-01-08Clingingboy上两篇讨论了如何定义结合数据源控件的数据绑定控件.这次我们一起来看下数据源控件是如何实现的。asp.net2.0已经为我们提供了很多数据源控件,相信大家都用过了,也希望大家对其有所熟悉.关于它能做什么就不说了。下面我们也一起来看看,如何简单的实现.

一.你必须了解的

1.关于数据源控件(DataSourceControl)

虽然表面看来,给数据绑定控件指定DataSourceID属性,数据源控件帮你做了一切工作,其实不然,数据源控件只负责收集与数据交互的相关信息,如:SqlDataSource的ConnectionString,AccessDataSource的DataFile

收集好这些信息后交给DataView类统一处理数据,但用户一般不与DataView类直接打交道,而是DataSourceControl,所以DataSourceControl需要获取DataView类,从而间接的调用数据相关操作方法。

因此,.net抽象定义出了一个接口IDataSource,实现IDataSource接口的任何类都是数据源控件,

.net为我们提供了一个起点DataSourceControl类,其实现了IDataSource接口

2.数据处理(DataSourceView数据源视图)

上面已经谈到,数据源控件将相关数据传给DataSourceView,处理数据。如SqlDataSourceView提供了相当多的数据操作,最基本的则是检索数据,接着还有添加,更新,删除等操作。

.net为我们提供了一个起点DataSourceView类,其中ExecuteSelect方法作为抽象方法,子类必须实现.

二.最简单实现(示例)

什么是最简单实现呢?比如只提供最基本的检索数据功能的数据源控件,这里我们只需要实现上面两个类的抽象方法就OK了,还是看示例吧.

(1)定义DataSourceView实现ExecuteSelect方法

public class MyDataSourceView : DataSourceView
{
public MyDataSourceView(MyDataSourceControl owner, string name)
: base(owner, name)
{
}

protected override IEnumerable ExecuteSelect(DataSourceSelectArguments arguments)
{
arguments.RaiseUnsupportedCapabilitiesError(this);

SqlConnection conn =
new SqlConnection("Server=localhost;Database=Northwind;uid=sa;pwd=123456");
conn.Open();

SqlCommand cmd =
new SqlCommand("SELECT CustomerID, ContactName, ContactTitle, CompanyName FROM Customers WHERE CustomerID LIKE "[AB]%"",
conn);
return (IEnumerable) cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
}

(2)定义DataSourceControl,获取DataSourceView

public class MyDataSourceControl : DataSourceControl
{
protected override DataSourceView GetView(string viewName)
{
return new MyDataSourceView(this, "");
}
}

你可能不相信,你已经完成了一个数据源控件了,使用方法一样,如下

<aspDemo:MyDataSourceControl ID="MyDataSourceControl1" runat="server">
</aspDemo:MyDataSourceControl>
<asp:GridView ID="GridView1" runat="server" DataSourceID="MyDataSourceControl1">
</asp:GridView>