数据绑定

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") %>

原文地址:https://www.cnblogs.com/huangll/p/2782948.html