(原創) 为什么GridView的DataSource可指定DataTable,亦可指定DataTable的DefaultView? (高级) (.NET) (ADO.NET)...

可指定给DataSource的object很广,有ArrayList,Collection,DataSet,DataTable,DataView,还有DataReader,甚至你自己写的Class也可以,为什么DataSource能接受这么广泛的对象呢?以前在用时,也从来没有注意过,网友momo问我这个问题后,才发现这是一个好问题。

我第一个推论是,DataTable的DefaultProperty就是DefaultView,所以当你指定DataTable给GridView.DataSource时,compiler会自动将该DataTable的DefaultView给GridView.DataSource。DefaultProperty是VB6的观念,VB6大量使用DefaultProperty,但我又问自己,C#该怎么写DefaultProperty呢?我自己也楞住了,C#似乎没有DefaultPropety的概念,所以应该不是DefaultProperty。

我的第二个推论是,DataSource应该是用overload写的,但查了MSDN Library,发现DataSource的signature是
1 None.gif [ThemeableAttribute( false )] 
2 None.gif[BindableAttribute( true )] 
3 ExpandedBlockStart.gifContractedBlock.gif public   virtual  Object DataSource  dot.gif getset; }
竟然只有一个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, 章立民 着, 碁峰出版社
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值