数据绑定
1.<%#%>
后台CS:
public string name, id;
public int age;
protected void Page_Load(object sender, EventArgs e)
{
name = "Lily";
id = "002";
age = 14;
Page.DataBind();//必须有
}
前台:
<div> 姓名:<%#name %><br/>学号:<%#id %><br/>年龄:<%#age %></div>
*CS代码中的变量必须是public才可以被页面使用
必须调用Page.DataBind(),<%#%>绑定才有效
2.<%=%>
后台CS:
public string name, id;
public int age;
protected void Page_Load(object sender, EventArgs e)
{
name = "Lily";
id = "002";
age = 14;
}
<%=%>类似于Response.Write;
<%#%>专用于数据绑定,可以绑定一些变量或者数据源中的东西,中间绑定是数据源的条目,若需其起作用,必须调用DataBind()方法
2.动态绑定服务器控件的属性值(以绑定Image的ImageUrl为例)
前台
<asp:DropDownList runat="server" ID="drop" AutoPostBack="true">
<asp:ListItem Text="image3" Value="image/3.jpg">image3</asp:ListItem>
<asp:ListItem Text="image4" Value="image/4.jpg">image4</asp:ListItem>
<asp:ListItem Text="image5" Value="image/5.jpg" Selected="True">image5</asp:ListItem>
</asp:DropDownList>
<asp:Image runat="server" ID="ima" ImageUrl="<%#drop.SelectedItem.Value %>"/>
后台CSS: Page.DataBind()
这样就动态绑定了ImageUrl
DataBinder类绑定
DataBinder类绑定的好处是会自动执行类型转换
格式:DataBinder.Eval(数据项的命名容器,数据字段名称,格式字符串)
在DataList,DataGrid,Repeater等能够显示多笔数据的服务器控件的模板中,数据项的命名容器永远是Container.DataItem
Container:代表绑定到数据源的父控件;DataItem代表父控件正在处理的数据记录
格式化字符串:中国货币{0:C}或string.Format("{0:C}",price),{0:¥0,0000.00}都可
时间:{0:d}{0:yyyy-mm-dd}
<ItemTemplate>
<table>
<tr><td colspan="2"> <span style="color:Fuchsia";>Here is The Message</span></td></tr>
<tr>
<td>number:</td><td><%#DataBinder.Eval(Container.DataItem,"number") %></td>
</tr><tr>
<td>name:</td><td><%#DataBinder.Eval(Container.DataItem,"uname") %></td>
</tr><tr>
<td>country:</td><td><%#DataBinder.Eval(Container.DataItem,"country") %></td>
</tr>
<tr><td>Salary:</td><td><%#DataBinder.Eval(Container.DataItem, "pay", "{0:¥#,##0.00}")%></td></tr>
</table>
</ItemTemplate>
Eval方法和Bind方法区别:
Eval是静态方法(只读),该方法采用数据字段的值作为参数并将其作为字符串返回。
Bind方法支持读写功能,可以检索数据绑定控件的值并将任何更改提交回数据库。
Eval方法在运行时调用DataBInder对象的Eval方法,同时引用命名容器的当前数据项,命名容器通常是包含完整记录的数据绑定控件的最小组成部分,如GridView控件中的一行。因此对数据帮当控件的模板内的绑定使用Eval方法。Eval方法以数据字段的名称作为参数,从数据源的当前记录返回一个包含该字段值的字符串。
Bind方法:在ASP.NET中,数据绑定控件可自动使用数据源控件的更新、删除、和插入操作。如果,已为数据源控件定义了SqlSelect、insert、Update、delete语句,则通过使用GridView等控件模板中的方法,就可以使控件从模板中的子空间中提取值,并将这些值传递给数据源控件,数据数据源控件将执行适当的数据库命令。因此,在数据绑定控件的EditItemTemplate,InsertItemTemplate中要使用Bind函数。
Bind方法通常与输入控件一起使用,例如编辑模式中的GridView行所呈现的TextBox控件,当数据绑定控件将输入控件作为自身呈现的一部分创建时,可使用该方法提取输入值
<asp:TextBox runat="server" ID="text" Text='<%#Bind("uname") %>'>
DataBinder.Eval的基本格式
DataBinder.Eval(Container.DataItem,"XXX","{0}")
<%# DataBinder.Eval(Container.DataItem,"xxxx")%>
<%# DataBinder.Eval(Container,"DataItem.xxxx")%>
问题1、他们是有什么不同?
问题2、他们是否可以相互替换?
问题3、DataBinder.Eval(Container.DataItem,"") 这个Container和DataItem分别都是什么?
答1:Eval是对数据的只读绑定,被绑定的子控件所属的父控件(比如GridView)不能用此子控件接收用户输入的修改。Bind是双向绑定,所谓双向,是数据源---显示界面的双向数
据流动,即读/写。
答2:Eval可以替换为Bind,但会降低性能;反之不能替换。
答3:Container即容器,指父控件;DataItem指父控件所绑定的数据源的当前行,不是字段。
如果只是显示值<%#Eval("字段名")%>就可以了.
如果是要修改值<%#Bind("字段名")%>就可以了.
以下两种的显示是相同的
<%# Eval("name") %>
<%# DataBinder.Eval(Container.DataItem,"sex") %>