靈活的運用數據綁定操作
綁定到簡單屬性:<%#UserName%>
綁定到集合:<asp:ListBox id=ListBox datasource=<%# myArray%> runat=server>
綁定到表達式:<%#(classpropertyToString() + + classpropertyToString())%>
綁定到方法返回值:<%# GetSafestring(str) %>
綁定到Hashtable:<%# ((DictionaryEntry)ContainerDataItem)Key%>
綁定到ArrayList:<%#ContainerDataItem %>
若數組裡裡放的是對象則可能要進行必要的轉換後再綁定如:
<%#((對象類型)ContainerDataItem)屬性%>
綁定到DataViewDataTableDataSet:
<%#((DataRowView)ContainerDataItem)[字段名]%>或
<%#((DataRowView)ContainerDataItem)Rows[][字段名]%>
要格式化則:
<%#stringFormat(格式((DataRowView)ContainerDataItem)[字段名])%>
<%#DataBinderEval(ContainerDataItem字段名格式)%>
綁定到DataReader:
<%#((IDataReader)ContainerDataItem)字段名%>
當然為了方便一般使用最多的就是DataBinder類的Eval方法了不過這樣對於同時要綁定大量的數據效率要低一些
在綁定數據時經常會用到這個程序<%# DataBinderEval(ContainerDataItemxxxx)%>或者<%# DataBinderEval(ContainerDataItemxxxx)%>
今天又學到一種而且微軟也說這種方法的效率要比以上兩種高
<%# ((DataRowView)ContainerDataItem)[xxxx]%>
很有用的這樣可以在前台頁面做好多事情了
還要記住要這樣用必須要在前台頁面導入名稱空間SystemData否則會生成錯誤信息
<%@ Import namespace=SystemData %>
這種用法其實和<%# ((DictionaryEntry)ContainerDataItem)Key%>是一個道理
綁定到DataSetDataTable時:
<%#((SystemDataDataRowView)ContainerDataItem)[字段名]%>
<%#((SystemDataDataRowView)ContainerDataItem)[索引]%>
綁定到DataReader時:
<%#((SystemDataCommonDbDataRecord)ContainerDataItem)[索引]%>
<%#((SystemDataCommonDbDataRecord)ContainerDataItem)[字段名]%>
關鍵是Container這個東西它比較神秘它的名稱空間是SystemComponentModel對於 它我還需要進一步理解
初學NET現在在看DataGrid控件在ItemTemplate顯示數據時
DataBinderEval(ContainerDataItemName)和ContainerDataItem(Name)有什麼 區別?
DataBinder是SystemWeb裡面的一個靜態類它提供了Eval方法用於簡化數據綁定表達式的編寫但是它使用的方式是通過 Reflection等開銷比較大的方法來達到易用性因此其性能並不是最好的而Container則根本不是任何一個靜態的對象或方法它是 ASPNET頁面編譯器在數據綁定事件處理程序內部聲明的局部變量其類型是可以進行數據綁定的控件的數據容器類型(如在Repeater內部的數據綁 定容器叫RepeaterItem)在這些容器類中基本都有DataItem屬性因此你可以寫ContainerDataItem這個屬性返回的 是你正在被綁定的數據源中的那個數據項如果你的數據源是DataTable則這個數據項的類型實際是DataRowView
From:http://tw.wingwit.com/Article/program/net/201311/13676.html