1 [ThemeableAttribute( false )] 2 [BindableAttribute( true )] 3 public virtual Object DataSource { get; set; }
竟然只有一个Object型别,所以overload的推论也错了。 我的第三个推论是,要不然就都必须时作一个interface才行,结果我在 章立民的 用实例学ASP.NET 使用VB.NET与ADO.NET的P6-33页找到,只要任何支持IEnmerable interface的object,都可指定给DataSource,如此问题总算找到答案了。 我用MSDN Library去查IEnumerable,他只有一个GetEnumerator这个method,也就是说,当GridView.DataBind()时,他会从GrirView.DataSource所指定的object中去呼叫GetEnumerator()去抓数据,无论你是任何object,只要都有GetEnumerator()即可,DataTable和DataView因为都实做了IEnumerable,所以都有GetEnumerator(),所以都可以指定给DataSource。 所以在回到问题的源头,GridView.DataSource = ds.Tables[0]; 和 GridView.DataSource = ds.Tables[0].DefaultView; 写法既然都可以,该用哪一个呢? 我觉得直接写ds.Tables[0]的速度较快,而ds.Tables[0].DefaultView还要再产生DataView object,不过这也只是推论而已,我觉得要实际看一下所产生的MSIL code才能证实,等我今天写完作业后,我再来看一下他所产生的MSIL code. Reference 用实例学ASP.NET 使用VB.NET与ADO.NET P6-33, 章立民 着, 碁峰出版社