Asp.net Eval 学习总结
C# Eval在asp.net中的用法及作用
https://www.cnblogs.com/Mr_JinRui/archive/2010/07/06/1772129.html
Eval( " ")和Bind( " ") 這兩種一個單向綁定,一個雙向綁定,bind是雙向綁定,但需數據源支持
ASP.NET ? 2.0改善了模板中的數據綁定操作,把v1.x中的數據綁定語法DataBinder.Eval(Container.DataItem, ? fieldname)簡化為Eval(fieldname)。Eval方法與DataBinder.Eval一樣可以接受一個可選的格式化字符串參數。縮 短的Eval語法與DataBinder.Eval的不同點在于,Eval會根據最近的容器對象(例如DataListItem)的DataItem屬性 來自動地解析字段,而DataBinder.Eval需要使用參數來指定容器。由于這個原因,Eval只能在數據綁定控件的模板中使用,而不能用于 Page(頁面)層。當然,ASP.NET ? 2.0頁面中仍然支持DataBinder.Eval,你可以在不支持簡化的Eval語法的環境中使用它。?
下面的例子演示了如何使用新的簡化的Eval數據綁定語法綁定到DataList數據項模板(ItemTemplate)中的Image、Label和HyperLink控件。
<asp:DataList ID="DataList1 " RepeatColumns="5 " Width="600 " runat="server " DataSourceID="ObjectDataSource1 ">
? ? ? ? ? ? <ItemTemplate>
? ? ? ? ? ? ? ? <asp:HyperLink ID="HyperLink1 " runat="server " NavigateUrl='<%# ? Eval( "PhotoID ", ? "PhotoFormViewPlain.aspx?ID={0} ")%>'>?
? ? ? ? ? ? <asp:Image ? ID= "Image1 " ? Runat= "server " ? ImageUrl= <%# ? Eval( "FileName ", ? "images/thumbs/{0} ")%>/></asp:HyperLink>
? ? ? ? ? ? ? ? <asp:Label ID="CaptionLabel " runat="server " Text='<%# ? Eval( "Caption ") ? %>' />
? ? ? ? ? ? </ItemTemplate>
? ? ? ? </asp:DataList><br />
? ? ? ? <asp:ObjectDataSource ID="ObjectDataSource1 " runat="server " TypeName="DataComponentTableAdapters.PhotosTableAdapter "
? ? ? ? ? ? SelectMethod="GetPhotosForAlbum ">
數據綁定也可以作為控件的主題定義(theme ? definition)的一部分,這樣我們就可以通過改變主題來隨意地改變模板化控件的布局和外觀。但是Theme(主題)模板中只能使用Eval(或者 后面討論的Bind)。綁定到任意的用戶代碼是被禁止的。 ??
1.DataBinder.Eval用法
//顯示二位小數
<%# DataBinder.Eval(Container.DataItem, "UnitPrice", "${0:F2}") %>
?
//{0:G}代表顯示True或False
?
<ItemTemplate>
? ? <asp:Image Width="12" Height="12" Border="0" runat="server"
? ? ? ? ? ?AlternateText='<%# DataBinder.Eval(Container.DataItem,?
"Discontinued", "{0:G}") %>'
? ? ? ? ? ?ImageUrl='<%# DataBinder.Eval(Container.DataItem,?
"Discontinued", "~/images/{0:G}.gif") %>' />
</ItemTemplate>
//轉換類型
?((string)DataBinder.Eval(Container, "DataItem.P_SHIP_TIME_SBM8")).Substring(4,4)
{0:d} 日期只顯示年月日
{0:yyyy-mm-dd} 按格式顯示年月日
{0:c} 貨幣樣式
2.Container.DataItem用法.?
在綁定數據時經常會用到這個句程序:<%# DataBinder.Eval
(Container.DataItem,"xxxx")%>或者<%# DataBinder.Eval
(Container,"DataItem.xxxx")%>
還有一種,而且微軟也說這種方法的效率要比以上兩種高。
<%# ((DataRowView)Container.DataItem)["xxxx"]%>
很有用的,這樣可以在前臺頁面做好多事情了。
還要記住要這樣用必須要在前臺頁面導入名稱空間System.Data,否則會生成錯誤信息。
<%@ Import namespace="System.Data" %>
這種用法其實和<%# ((DictionaryEntry)Container.DataItem).Key%>是一個道理。
關鍵是Container這個東西,它的名稱空間是System.ComponentModel。
3.DataBinder.Eval和Container.DataItem的區別
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
DataBinder.Eval(Container.DataItem,"Name")和Container.DataItem("Name")有什么區別?
DataBinder是System.Web里面的一個靜態類,它提供了Eval方法用于簡化數據綁定表達式的編寫,但是它使用的方式是通過 Reflection等開銷比較大的方法來達到易用性,因此其性能并不是最好的。而Container則根本不是任何一個靜態的對象或方法,它是 ASP.NET頁面編譯器在數據綁定事件處理程序內部聲明的局部變量,其類型是可以進行數據綁定的控件的數據容器類型(如在Repeater內部的數據綁 定容器叫RepeaterItem),在這些容器類中基本都有DataItem屬性,因此你可以寫Container.DataItem,這個屬性返回的 是你正在被綁定的數據源中的那個數據項。如果你的數據源是DataTable,則這個數據項的類型實際是DataRowView。
引用:http://www.cnblogs.com/yangjunwl/articles/1120560.html
數據綁定表達式必須包含在<%#和%>字符之間。格式如下:
<tagprefix:tagname property='<%# data-binding expression %>' runat="server" />
或者如下:
<%# data-binding expression %>
ASP.NET 支持分層數據綁定模型,數據綁定表達式使用 Eval 和 Bind 方法將數據綁定到控件,并將更改提交回數據庫。
Eval 方法是靜態單向(只讀)方法,所以Eval 函數用于單向(只讀)綁定,該方法采用數據字段的值作為參數并將其作為字符串返回。
Bind 方法支持讀/寫功能,所以Bind 函數用于雙向(可更新)綁定。該方法可以檢索數據綁定控件的值并將任何更改提交回數據庫。
XPath 方法支持對XML類型的數據源提供支持。
數據綁定表達式都可以出現在頁面的哪個位置呢?
一,可以將數據綁定表達式包含在服務器控件或者普通的html元素的開始標記中屬性名/屬性值對的值側。例如:
<asp:TextBox ID="TextBox1" runat="server" Text='<%#數據綁定表達式%>' ></asp:TextBox><br />
注意條款:此時數據的綁頂表達式可以是一個變量,也可以是一個帶返回值的C#或者VB.NET方法,還可以是某個控件的某個屬性的值,也可以是C#或者VB.NET對象的某個字段或者屬性的值等等。當然也可以直接就是一個字符串,例如"hello"。
如果此時的數據綁定表達式是Eval("數據庫中某個表的某個字段")等,那么必須把TextBox1放在某個循環顯示的控件的模板中才正確,否則會提 示:Eval()、XPath() 和 Bind() 這類數據綁定方法只能在數據綁定控件的上下文中使用。其實就是想讓你把TextBox1放在像Repeater,DataList,GridView這樣 的控件的模板中。
二,數據綁定綁定表達式包含在在頁面中的任何位置。例如:
<form id="form1" runat="server">
? ? <div>
? ? ?<%#Eval("數據綁定表達式1")%> ?
? ? ?<%#Eval("數據綁定表達式2")%> ? ? ? ?
? ? </div>?
</form>
同樣遵循"一"的注意條款。
如果此時的數據綁定表達式是Eval("數據庫中某個表的某個字段")等,那么必須把 <%#Eval("數據綁定表達式1")%> ? <%#Eval("數據綁定表達式2")%> ?放在像Repeater,DataList,GridView這樣的控件的模板中。
三,可以將數據綁定表達式包含在Javascript代碼中,從而實現在Javascript中調用C#或者VB.NET的方法。例如:
?
數據綁定表達式都可以是什么類型呢?
1,可以是一個變量
例如:<asp:Label ID="Label1" runat="server" Text="<%#變量名%>"></asp:Label>
2,可以是服務器控件的屬性值
例如: <asp:Label ID="Label1" runat="server" Text="<%#TextBox2.Text %>"></asp:Label>
3,可以是一個數組等集合對象
例如把一個數組綁定到列表控件,例如ListBox等,或者Repeater,DataList,GridView這樣的控件等,此時只需要把屬性DataSource='<%# 數組名%>' 。
4,可以是一個表達式
例如:Person是一個對象,Name和City是它的2個屬性,則數據綁定表達式可以這樣寫:
<%#(Person.Name + " " + Person.City)%>。
5,可以是一個方法
例如:<%#GetUserName()%>。GetUserName()是一個已經定義的C#方法,一般要求有返回值。
6,可以是用Eval,DateBind.Eval取得的數據表的字段,這個是最常見的了,不再舉例。
注意:如果數據綁定表達式作為屬性的值,只要數據綁定表達式中沒有出現雙引號,那么<%#數據綁定表達式%>的最外層用雙引號或者單引號都可以。如果數據綁定表達式中出現雙引號,則<%#數據綁定表達式%>的最外層最好要用單引號。
與數據庫有關的數據綁定表達式的常用方法?
1,<%#DataBind.Eval(Container.DataItem,"字段名")%>
? ? ? <%#DataBind.Eval(Container.DataItem,"字段名","{0:c}") %>
? ? ?還有2種不常用的:
? ? ? <%# DataBinder.Eval(Container,"DataItem.字段名")%>?
? ? ? <%# DataBinder.Eval(Container,"DataItem.字段名",{0:c})%>?
? ? ? Container.DataItem相當于數據庫中某個表中的一行記錄,而一行可以有很多列。
? ? ? 最后一個參數和 String.Format的形式一樣。例如c代表貨幣,p代表百分號,d代表短日期格式顯示,f代表浮點數現實,f3代表小數點后三為,一次類推。
? ? ? ? ?使用三目運算符?:的例子:
?<%# DataBinder.Eval(Container.DataItem, "字段 名").ToString().Trim().Length>16?DataBinder.Eval(Container.DataItem, "字段 名").ToString().Trim().Substring(0,16):DataBinder.Eval(Container.DataItem, "字段名").ToString().Trim() %>
2,<%#Eval("字段名")%>
? ? ?<%#Eval("字段名","{0:c}")%>
? ? ?.NET 2.0新出現的一個方法。和DataBind.Eval()等價。
? ? ?最后一個參數和 String.Format的形式一樣。例如c代表貨幣,p代表百分號,d代表短日期格式顯示,f代表浮點數現實,f3代表小數點后三位,一次類推。
? ? ?使用三目運算符的例子:
<%#(Eval("性別")).ToString() =="True"?"男":"女"%> ?
?性別字段類型為:是/否(Access),bit(sql server)
? ? ? 使用方法調用的例子:
? <%# GetUserPhoto(Eval("PhotoPath")) %> ? ?
? ? ?GetUserPhoto()的定義:
string GetUserPhoto(object photoPath)
{
? if (photoPath == DBNull.Value)<%#((DataRowView)Container.DataItem)["字段名"] %>
? {
? ? ? return "<img src='Images/none.gif'>";
? }
? else
? {
? ? return "<img src='Upload/" +photoPath.ToString() + "'>";
? }
}
?3, <%#((DataRowView)Container.DataItem)["字段名"] %>
? ? ? <%# string.Format("{0:c}", ((DataRowView)Container.DataItem)["字段名"])%>
? ? ? ? ? 用String.Format方法設定字段的顯示樣式。例如c代表貨幣,p代表百分號,d代表短日期格式顯示,f代表浮點數現實,f3代表小數點后三為,一次類推。
? ? ? ?
? ? ? ?類型轉換例子:<%# (int)((DataRowView)Container.DataItem)["字段名1"]*(int) ((DataRowView)Container.DataItem)["字段名2"]%> ? ?意思是2個字段相乘。
? ? ?
上面三種綁定方法的效率:Eval方法執行時候會調用DataBinder.Eval方法,DataBinder.Eval方法在運行時使用反射執行后期 綁定計算,會導致性能明顯下降。所以會導致性能明顯下降。所以三者中<%#((DataRowView)Container.DataItem) ["字段名"] %>的性能最好。
========
ASP.NET 前端數據綁定---<%#%>及Eval()的使用
https://www.cnblogs.com/ammy714926/p/5360330.html
ASP.NET 前端html代碼中會經常出現的<%%>的代碼,里面的文本其實就是不能直接輸出到客戶端瀏覽器的文本,是需要服務器解釋的。
在ASP中,<%%>里面的文本是vbscript或者javascript代碼,在ASP.NET中,<%%>里面的文本就是.net平臺下支持的語言。
具體有三種:<%%>,<%#%>,<%=%>,后兩種主要是用于asp.net前端數據綁定的。
一 、<%=%>
在.aspx頁面,<%= %>標簽可以調用后臺.CS的變量/屬性或者方法,不過被調用的變量或方法必須是public的。
例:Default.cs文件里面有:
public string str = "test";
public string ReturnStr() ?
{
? return "test";
}
?那么前端Default.aspx文件里面就可以這樣寫:
<asp:Label ID="Label2" runat="server" Text='<%=str%>'></asp:Label>
<asp:Label ID="Label1" runat="server" Text='<%= ReturnStr() %>'></asp:Label>?
二、<%#%>
前端aspx頁面中,一幫服務器控件數據綁定的語法,結合Eval()方法綁定數據源(ASP.NET 提供了一個名為 DataBinder.Eval 的靜態方法,該方法計算后期綁定的數據綁定表達式,并將結果格式化為字符串(可選)。利用此方法,可以避免許多在將值強制為所需數據類型時必須執行的顯式強制轉換操作,DataBinder.Eval需要使用參數來指定容器)
例:Repeater控件,在Page_Load()方法中,加載數據:
后臺:
? ? protected void Page_Load(object sender, EventArgs e)
? ? {
? ? ? ? if (!IsPostBack)
? ? ? ? {
? ? ? ? ? ? intopage(DropDownListMgrDate.SelectedValue.ToString());
? ? ? ? ? ? //不會每次刷新頁面都重新綁定數據
? ? ? ? }
? ? ? ??
? ? }
? ? private void intopage(string Batchid)
? ? {
? ? ? ? ? ? this.Repeater1.DataSource = dmgr.GetCBProduct_MgrList(this.AspPage.CurrentPageIndex, AspPage.PageSize,Batchid);//CurrentPageIndex:當前頁索引值;PageSize:分頁每頁所能容納值
? ? ? ? ? ? this.Repeater1.DataBind();
? ? }
這里,Repeater1.DataSource的數據源既可以是DataSet,也可以是List,這里是List,對應前端DataBinder.Eval方法的參數是:ColumnName/屬性名稱
前端:
? ? ? ? ? ? ? ? ? ? ? ? <td>
? ? ? ? ? ? ? ? ? ? ? ? ? ? <%#DataBinder.Eval(Container.DataItem, "include_in_quantity")%>
? ? ? ? ? ? ? ? ? ? ? ? </td>
? ? ? ? ? ? ? ? ? ? ? ? <td title="<%#DataBinder.Eval(Container.DataItem, "part_description")%>">
? ? ? ? ? ? ? ? ? ? ? ? ? ? <%#DataBinder.Eval(Container.DataItem, "part_description").ToString().Length>20?DataBinder.Eval(Container.DataItem, "part_description").ToString().Substring(0,20)+"...":DataBinder.Eval(Container.DataItem, "part_description").ToString()%>
? ? ? ? ? ? ? ? ? ? ? ? </td>
這里Eval()綁定數據時結合使用了三元運算符,如果字符長度大于20,就截取+“...”,當鼠標滑到目標處,就會顯示。
========
ASP.NET中EVAL用法大全
https://www.cnblogs.com/chenmfly/p/4723654.html
<%# Bind("Subject") %> //綁定字段
<%# Container.DataItemIndex + 1%> //實現自動編號
<%# DataBinder.Eval(Container.DataItem, "[n]") %>
通常使用的方法(這三個性能最好)
<%# DataBinder.Eval(Container.DataItem, "ColumnName") %>
<%# DataBinder.Eval(Container.DataItem, "ColumnName", null) %>
<%# DataBinder.Eval(Container, "DataItem.ColumnName", null) %>
其他用法
<%# ((DataRowView)Container.DataItem)["ColumnName"] %>
<%# ((DataRowView)Container.DataItem).Row["ColumnName"] %>
<%# ((DataRowView)Container.DataItem)["adtitle"] %>
<%# ((DataRowView)Container.DataItem)[n] %>
<%# ((DbDataRecord)Container.DataItem)[0] %>
<%# (((自定義類型)Container.DataItem)).屬性.ToString() %>//如果屬性為字符串類型就不用ToString()了
DataBinder.Eval用法范例
<%# DataBinder.Eval(Container.DataItem, "IntegerValue", "{0:c}") %>
格式化字符串參數是可選的。如果忽略參數,DataBinder.Eval 返回對象類型的值,
//顯示二位小數
<%# DataBinder.Eval(Container.DataItem, "UnitPrice", "${0:F2}") %>
//{0:G}代表顯示True或False
<ItemTemplate>
<asp:Image Width="12" Height="12" Border="0" runat="server"
AlternateText='<%# DataBinder.Eval(Container.DataItem, "Discontinued", "{0:G}") %>'
ImageUrl='<%# DataBinder.Eval(Container.DataItem, "Discontinued", "~/images/{0:G}.gif") %>' />
</ItemTemplate>
//轉換類型
((string)DataBinder.Eval(Container, "DataItem.P_SHIP_TIME_SBM8")).Substring(4,4)
{0:d} 日期只顯示年月日
{0:yyyy-mm-dd} 按格式顯示年月日
{0:c} 貨幣樣式
<%#Container.DataItem("price","{0:¥#,##0.00}")%>
<%# DataBinder.Eval(Container.DataItem,"Company_Ureg_Date","{0:yyyy-M-d}")%>
Specifier Type ? ? ?Format ? ?Output (Passed Double 1.42) ? Output (Passed Int -12400)?
c ? Currency ? ? ? ? {0:c} ? ? ?$1.42 ? ? ?-$12,400?
d ? Decimal ? ? ? ? ?{0:d} ? ? System.FormatException ? -12400?
e ? Scientific ? ? ? {0:e} ? ? 1.420000e+000 ? ? -1.240000e+004?
f ? Fixed point ? ? ?{0:f} ? 1.42 ? ? -12400.00?
g ? General ? ? ? ? ?{0:g} ? 1.42 ? ? ?-12400?
n ? Number with commas for thousands ? {0:n} ? 1.42 ? ? ?-12,400?
r ? Round trippable ? ? {0:r} ? 1.42 ? ? ?System.FormatException?
x ? Hexadecimal ? ? {0:x4} ? System.FormatException ? ?cf90?
{0:d} 日期只顯示年月日
{0:yyyy-mm-dd} 按格式顯示年月日
樣式取決于 Web.config 中的設置
{0:c} ? 或 {0:£0,000.00} 貨幣樣式 ? 標準英國貨幣樣式
<system.web>
<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="en-US" uiCulture="en-US" />
</system.web>
顯示為 £3,000.10
{0:c} ? 或 string.Format("{0:C}", price); 中國貨幣樣式
<system.web>
<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="zh-cn" uiCulture="zh-cn" />
</system.web>
顯示為 ¥3,000.10
{0:c} ? 或 string.Format("{0:C}", price); 美國貨幣樣式
<system.web>
<globalization requestEncoding="utf-8" responseEncoding="utf-8" />
</system.web>
顯示為 $3,000.10
========
ASP.NET Eval四種綁定方式
https://blog.csdn.net/guo_lover/article/details/51850580
ASP.NET Eval四種綁定方式:
1、1.x中的數據綁定語法
<asp:Literal id="litEval2" runat="server" Text='<%#DataBinder.Eval(Container.DataItem, "userName")%>' />
2、 2.x簡化Eval數據綁定語法
<asp:Literal id="litEval1" runat="server" Text='<%Eval("userName")%>' />
3、第二種方法的方法重載
<a href='<%# Eval("userId","Default.aspx?id={0}")%>'><%# Eval("userName") %></a>
4、eval同時綁定兩個值
<a href='<%# string.Format("Default.aspx?id={0}&role={1}", Eval("userId"),Eval("userRole"))%>'><%# Eval("userName") %></a>
eval_r()方法在運行時使用反射執行后期綁定計算,因此與標準的ASP.NET數據綁定方法bind相比,會導致性能明顯下降。它一般用在綁定時需要格式化字符串的情況下。多數情況盡量少用此方法
Eval 方法是靜態(只讀)方法,該方法采用數據字段的值作為參數并將其作為字符串返回。Bind 方法支持讀/寫功能,可以檢索數據綁定控件的值并將任何更改提交回數據庫。
使用 Eval 方法
Eval 方法可計算數據綁定控件(如 GridView、DetailsView 和 FormView 控件)的模板中的后期綁定數據表達式。在運行時,Eval 方法調用 DataBinder 對象的 Eval 方法,同時引用命名容器的當前數據項。命名容器通常是包含完整記錄的數據綁定控件的最小組成部分,如 GridView 控件中的一行。因此,只能對數據綁定控件的模板內的綁定使用 Eval 方法。
Eval 方法以數據字段的名稱作為參數,從數據源的當前記錄返回一個包含該字段值的字符串。可以提供第二個參數來指定返回字符串的格式,該參數為可選參數。字符串格式參數使用為 String 類的 Format 方法定義的語法。
使用 Bind 方法
Bind 方法與 Eval 方法有一些相似之處,但也存在很大的差異。雖然可以像使用 Eval 方法一樣使用 Bind 方法來檢索數據綁定字段的值,但當數據可以被修改時,還是要使用 Bind 方法。
在 ASP.NET 中,數據綁定控件(如 GridView、DetailsView 和 FormView 控件)可自動使用數據源控件的更新、刪除和插入操作。例如,如果已為數據源控件定義了 SQL Select、Insert、Delete 和 Update 語句,則通過使用 GridView、DetailsView 或 FormView 控件模板中的 Bind 方法,就可以使控件從模板中的子控件中提取值,并將這些值傳遞給數據源控件。然后數據源控件將執行適當的數據庫命令。出于這個原因,在數據綁定控件的 EditItemTemplate 或 InsertItemTemplate 中要使用 Bind 函數。
Bind 方法通常與輸入控件一起使用,例如由編輯模式中的 GridView 行所呈現的 TextBox 控件。當數據綁定控件將這些輸入控件作為自身呈現的一部分創建時,該方法便可提取輸入值。
Bind 方法采用數據字段的名稱作為參數,從而與綁定屬性關聯,如下面的示例所示:
<EditItemTemplate>?
<table>?
<tr>?
<td align=right>?
<b>Employee ID:</b>?
</td>?
<td>?
<%# eval_r("EmployeeID") %>?
</td>?
</tr>?
<tr>?
<td align=right>?
<b>First Name:</b>?
</td>?
<td>?
<asp:TextBox ID="EditFirstNameTextBox" RunAt="Server" Text='<%# Bind("FirstName") %>' />?
</td>?
</tr>?
<tr>?
<td align=right>?
<b>Last Name:</b>?
</td>?
<td>?
<asp:TextBox ID="EditLastNameTextBox" RunAt="Server" Text='<%# Bind("LastName") %>' />?
</td>?
</tr>?
<tr>?
<td colspan="2">?
<asp:LinkButton ID="UpdateButton" RunAt="server" Text="Update" CommandName="Update" />?
<asp:LinkButton ID="CancelUpdateButton" RunAt="server" Text="Cancel" CommandName="Cancel" />?
</td>?
</tr>?
</table>?
</EditItemTemplate>
單擊行的 Update 按鈕時,使用 Bind 語法綁定的每個控件屬性值都會被提取出來,并傳遞給數據源控件以執行更新操作。
使用 DataBinder.Eval
ASP.NET 提供了一個名為 DataBinder.Eval 的靜態方法,該方法計算后期綁定的數據綁定表達式,并將結果格式化為字符串(可選)。利用此方法,可以避免許多在將值強制為所需數據類型時必須執行的顯式強制轉換操作。
例如,在下面的代碼片段中,一個整數顯示為貨幣字符串。使用標準的 ASP.NET 數據綁定語法,必須首先強制轉換數據行的類型以便檢索數據字段 IntegerValue。然后,這將作為參數傳遞到 String.Format 方法:
<%# String.Format("{0:c}", ((DataRowView)Container.DataItem)["IntegerValue"]) %>
將此語法與 DataBinder.Eval 的語法進行比較,后者只有三個參數:數據項的命名容器、數據字段名稱和格式字符串。在模板化列表中(如 DataList 類、DataGrid 類或 Repeater 類),命名容器始終是 Container.DataItem。
<%# DataBinder.eval_r(Container.DataItem, "IntegerValue", "{0:c}") %>
格式字符串參數是可選的。如果它被忽略,DataBinder.Eval 將返回類型對象的值,如下面的示例所示:
<%# (bool)DataBinder.eval_r(Container.DataItem, "BoolValue") %>
當對模板化列表中的控件進行數據綁定時,DataBinder.Eval 特別有用,因為數據行和數據字段通常都必須強制轉換。
在TemplateField模板中為了能夠有限制的或者取出數據庫中某列的值時,可以用Bind和Eval方法來實現。以下是Bind方法的格式,Eval的格式也是和Bind一樣的。 Bind("列的名稱","顯示的格式文")
比如我們要取個日期型的數據,在數據庫中列名是updated,數值是2008/06/01。但是想2008年06月01日這樣顯示,我們可以這樣來寫Bind("updated", "{0:yyyy年MM月dd日}"),Eval也是如此。
兩者都能讀取數據中的值,并顯示。當我們使用編輯更新操作時,Bind能夠自動的將修改的值更新到數據庫中,并顯示出修改后的值。但是用了Eval卻只能得到錯誤畫面,新的數據沒有更新到數據庫中。
從這點看來,Bind方法和Eval方法的區別就是:Bind方法在讀取和更新數據這2方面都是可以,但是Eval方法只能讀取顯示數據。所以,我們在選擇Bind方法和Eval方法的時候,必須要有爭對性,當數據肯定需要更新操作的時候我們應該使用Bind,只是顯示數據,不會有任何操作的就可以使用Eval方法。
在更新操作中我們可以在GridView1_RowUpdating事件中操作,例子如下:
如果我們能充分理解Bind方法和Eval方法,其實也就沒必要向上面那樣去寫,都是可以自動完成的。上面的方法除了比較復雜的操作才會用到,這也是一個使用技巧。
========
asp.net中<%#eval(''")%>中<%# %>這個符號代表什么意思
里面加#是什么用呢?
在.net中,有幾種方式:
<%@%>:此處是聲明性質語句。放在頁面頂端,讓編譯器知道,如何處理后臺代碼和前端代碼。比如,創建一個頁面級引用自定義控件:
<%@ Page Language="C#" Inherits="{后臺代碼類}" %>
<%@ Register Src="{自定義控件}.ascx" TagPrefix="{....}" TagName="{....}" %>
<%=%>:此處和ASP語言是基本一致的,即:直接將結果輸出到當前位置。
<%#%>:當需要數據綁定時,就需要用到<%#%>。
<%$%>:當需要使用資源時,就需要用到<%$%>
比如,在做多語言系統時,我們應用資源文件,則可以:
<asp:Literal runat="server" Text='<%$Resources: {資源文件}, {關鍵字} %>' />
====
代碼運行于服務器端的意思
asp的話就是:<%%>
加#號是為了與ASP代碼區別開來。因為都是在HTML代碼中混入服務器端的代碼,ASP的話是<%...%>
ASP.NET為了區別,就加個#號:<%#....%>
否則編譯器就沒辦法區分到底是按ASP來編譯還是按ASP.NET來編譯了.
========
ASp.NET中如何使用Eval顯示綁定數據
在aspx頁面中用的是Eval顯示數據結果,但總有不能顯示的,如何解決呢?小編將自己的經驗分享一下。
1
頁面中常用的:
<%# Eval(“Field”).Tostring()%>顯示頁面綁定數據結果。
2
使用三元運算符
<%# Eval(“Field”)=="str”?"somecode":"somecode"%>
如此方法顯示簡單的條件判斷結果,如同if語句判斷。
因為在.aspx頁面中Eval是不能與if一同使用的。
3
前臺調用:
<%# Handler(Eval("Field").ToString()) %>
在后臺頁面寫邏輯代碼,返回字符串
public string Handler(string str)
{
? ? ? ? if (str.Length > 5000)
? ? ? ? {
? ? ? ? ? ? return "<div title='" + str + "'>" + str + "</div>";
? ? ? ? }
? ? ? ? else
? ? ? ? {
? ? ? ? ? ? return str;
? ? ? ? }
}
4
后臺寫類方法,前臺調用類函數傳參。
<%# Pagefun.GetCpStr(Eval("cpjglx").ToString(), Eval("id").ToString())%>
Pagefun.GetCpStr()后臺的類方法定義。
5
還是不能用Eval綁定實現,
則可以在page_load后臺函數定義ViewState
顯示在.aspx頁面中如<%=viewstate["id"]%>
6
在C#中獲取一個二維數組的兩維長度,即行數和列數?
float[,] p=new float[]{};
p.getlength(0);
p.getlength(1);
0代表的行數,1代表的列數,即,一維和二維
========
Asp.net Eval 截取字符串
用Eval來顯示數據庫的段落,但是這個Eval是直接把數據庫的文字全部顯示出來的,有些時候,很多時候字符串過長,不便于查看,只顯示部分字符串,可以用Title屬性來顯示所有字符串,但是每次都在數據庫里頭截取有點麻煩,干脆就在服務端來弄算了 ,方法如下:?
label.Text='<%# Eval("CheckList").ToString().Length>8?Eval("CheckList").ToString().Substring(0,8)+"..":Eval("CheckList") %>'
label.Text='<%# Eval("model").ToString().Length>8?Eval("model").ToString().Substring(0,8)+"..":Eval("model") %>'
========
ASP.NET 中如何在使用Eval()綁定數據時使用三元運算符
https://blog.csdn.net/weinierbian/article/details/7821702
ASP.NET邦定數據“<%#Eval("Sex")%>”運用三元運算符:
<%#(Eval("Sex", "{0}") == "01") ? "男" : "女"%>
<%#(Convert.ToInt32(Eval("NowDate","{0}"))>60)?Convert.ToInt32(Eval("NowDate"))/60+"小時前":Eval("NowDate").ToString()+"分鐘前"%><span class="style3"> 來自優酷網</span></td>
ImageUrl='<%#(Eval("Use_Pic", "{0}").ToString() =="Null")? "Head/head.png" : Eval("Use_Pic")%>'
?
另一種很好的思路是:
<%# MyMethod((string)Eval("字段1"),(string)Eval("字段2"),(MyProduct)Eval("字段3"))%> ?
在后臺代碼中定義函數 MyMethod,愿意怎么寫就怎么寫。
========
使用Eval()綁定數據時使用三元運算符
ASP.NET邦定數據“<%#Eval("Sex")%>”運用三元運算符:?
<%#(Eval("Sex", "{0}") == "01") ? "男" : "女"%>
<%#(Convert.ToInt32(Eval("NowDate","{0}"))>60)?Convert.ToInt32(Eval("NowDate"))/60+"小時前":Eval("NowDate").ToString()+"分鐘前"%><span class="style3"> ?來自優酷網</span></td>
?ImageUrl='<%#(Eval("Use_Pic", "{0}").ToString() =="Null")? "Head/head.png" : Eval("Use_Pic")%>' ?
數據綁定時多余的長度用“……”代替:
<asp:LinkButton ID="linkMessage" ForeColor="Black" runat="server" Text='<%#Eval("NewsTitle").ToString().Length>10?Eval("NewsTitle").ToString().Substring(0,10)+"……":Eval("NewsTitle")%>'/>
Eval綁定方法:
<asp:TemplateField HeaderText="付費狀態">
? ? <ItemTemplate>
? ? ? ?<asp:Label runat="server" ID="lbPayStatus" Text='<%#BLL.OrderBLL.GetPayStatus(Convert.ToInt32(Eval("id"))) %>'/>
? ? </ItemTemplate>
? ?</asp:TemplateField>
多條件綁定:
<asp:TemplateField HeaderText="一審結果">
? ? <ItemTemplate>
? ? ?<%#Eval("hg_A").ToString()=="1"?"通過":Eval("hg_A").ToString()=="2"?"不通過":""%>
? ? ?</ItemTemplate>
?</asp:TemplateField>
========
?
總結
以上是生活随笔為你收集整理的Asp.net Eval 学习总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CSS父级子级学习总结
- 下一篇: VC++文件编程操作实例