你的位置:首页 > ASP.net教程

[ASP.net教程]数往知来 ASP.NET 服务端基本控件_Repeater_ListView_ObjectDataSource二十七


一、服务端ID和客户端ID

一般情况下拖一个服务端的控件系统就会自动为我们生成这个控件的ID

要想在服务端接收到服务器控件的回发数据必须要在控件上加上  AutoPostBack="true"

基本控件:

--》服务器控件会生成一个ID,在后台可以根据这个ID访问到这个控件,在页面上也可以通过同一个ID来获得,但是这个ID有时候会不一致,如

<ItemTemplate>里面会循环就会为每个控件生成不同的ID,这时候我们在页面上就可以通过<%=TextBox1.ClientID %>来获得客户端ID

document.getElementById('<%=TextBox1.ClientID %>').setAttribute('style','background-color:red');

二、Repeater

绑定数据,

if (!IsPostBack)    {      TblPersonBLL bll = new TblPersonBLL();      this.Repeater1.DataSource = bll.GetAllDate();      this.Repeater1.DataBind();     }

--------头模板:;表的开始(<table>)和表头部分

<asp:Repeater ID="Repeater1" runat="server" onitemcommand="Repeater1_ItemCommand">  <HeaderTemplate><!--表头:头模板-->    <table border="0" cellpadding="0" cellspacing="0">   <tr>  <th>编号</th><th>姓名</th><th>年龄</th><th>身高</th><th>性别</th></tr>  </HeaderTemplate>

----------项模板:相当于一个foreach循环,会循环表里的每一行,一个Repeater里面必须要有一个项模板(ItemTemplate)

<ItemTemplate><!--项模板--><tr onmouseover="this.style.backgroundColor='cyan'" onmouseout="this.style.backgroundColor=''">  <td><%#Eval("AutoId") %></td>  <td><%#Eval("UName") %></td>  <td><%#Eval("Age") %></td>  <td><%#Eval("Height") %></td>  <td><%#Eval("Gender") %></td>  <td><asp:Button Text="删除" runat="server" ID="btnDel" CommandName="AutoId" CommandArgument='<%#Eval("AutoId") %>' /></td></tr>  </ItemTemplate>

---------------分割模板:会隔行分隔开,比如说要做隔行变色的功能就可以在这个模板里设置里面的每一项的背景色

<AlternatingItemTemplate><!--分割模板-->  <tr onmouseover="this.style.backgroundColor='cyan'" onmouseout="this.style.backgroundColor=''">  <td><%#Eval("AutoId") %></td>  <td><%#Eval("UName")%></td>  <td><%#Eval("Age")%></td>  <td><%#Eval("Height")%></td>  <td><%#Eval("Gender")%></td>  <td><asp:Button Text="删除" runat="server" ID="btnDel" CommandName="AutoId" CommandArgument='<%#Eval("AutoId") %>' /></td></tr>  </AlternatingItemTemplate>

-----------------脚模板:表的结束(</table>)

   <FooterTemplate><!--脚模板-->

      </table>

    </FooterTemplate>

    </asp:Repeater>

三、ListView+ObjectDataSource

1)先把三层架起来,bll里的方法参数最好都用实体对象

ListView和ObjectDataSource结合起来一起用

2)把ListView的数据源设置为ObjectDatasource

3)配置ObjectDataSource的数据源,选择业务对象:BLL(业务逻辑层)--》点击下一步

4)分别为SELECT   /  UPDATE   /INSERT  /DELETE   选择方法  完成

--------自定义分页

1)写一个获取总记录数的方法  GetCount(),目的是要告诉ObjectDataource一共有多少条记录,这样它才知道显示到第几条为止

/// <summary>    /// 获取总的记录数    /// </summary>    /// <returns></returns>    public object GetCount()    {      string sql = "select count(*) from TblPerson";      return SqlHelper.ExecuteScalar(sql, CommandType.Text, null);    }

2)再写一个返回指定页数的记录的方法,这样才能知道怎么取到特定的区间的值

/// <summary>    /// 高效的ListView分页    /// </summary>    /// <param name="startRowIndex">每页显示的开始行的索引</param>    /// <param name="maximumRows">每一页显示多少行数据</param>    /// <returns></returns>    public List<TblPerson> GetPageNum(int startRowIndex, int maximumRows)    {      string sql = "select * from (select row_number() over(order by autoId) ID,*from TblPerson) t where ID>@startRowIndex and ID<=@startRowIndex+@maximumRows";      SqlParameter[] par = {                   new SqlParameter("@startRowIndex",startRowIndex),                  new SqlParameter("@maximumRows",maximumRows)                 };      DataTable dt = SqlHelper.GetTable(sql, CommandType.Text, par);      List<TblPerson> list =new List<TblPerson>();      if (dt.Rows.Count>0)      {        foreach (DataRow item in dt.Rows)        {          TblPerson per = RowToTblPerson(item);          list.Add(per);         }        return list;      }      else      {        return null;      }    }

3)为objectDataSource配置数据源的时候把返回指定页数记录的方法(GetPageNum)绑定到  SELECT选择方法上,下一步-->完成

4)设置ObjectDatasource的属性:

EnablePaging  -->true

SelectCountMethod   -->GetCount

MaximumRowParameterName  --》maximumRows

StartRowIndexParameterName  -->startRowIndex

这两个参数的名字必须要和GetPageNum()方法的名字保持一致

5)把在源文件里生成的两个参数删除

<asp:Parameter Name="startRowIndex" Type="Int32" />

                <asp:Parameter Name="maximumRows" Type="Int32" />

如果分页的页码条的代码写在了ListView外面记得要把DataPager的PagedControlId绑定到对应的ListView

四、DorpDownList  注意回发,要在控件上加AutoPostBack="true"  否则该控件的数据不会回发到服务端,服务端接收不到数据,

       if (!IsPostBack)//判断:IsPostBack如果是get请求返回false,否则为true,IspostBack是根据请求报文里是否有__VIEWSTATE这个隐藏域来判断的,如果有这个隐藏域则认为是post过来的,因为这个隐藏域是页面上有服务端控件或者用户通过ViewState[键]=值 自定义之后系统会自动生成这样一个隐藏域并输出给浏览器,当客户端提交表单时这个隐藏域才会提交过来,如果不进行判断无论是get请求还是post请求都会执行一次后面的代码

---------后台类绑定数据

if (!IsPostBack)//判断:IsPostBack如果是get请求返回false,否则为true,IspostBack是根据请求报文里是否有__VIEWSTATE这个隐藏域来判断的    {      TblPersonBLL bll = new TblPersonBLL();      this.DropDownList1.DataSource = bll.GetAllDate();//绑定数据源      this.DropDownList1.DataTextField = "UName";//设置每一个项的显示的值,这个值是返回的数据源的实体的一个属性      this.DropDownList1.DataValueField = "AutoId";//设置每一个项的要向服务端提交的值,这个值是返回的数据源的实体的一个属性      this.DropDownList1.DataBind();//进行绑定    }

--------》前台类绑定数据  要想额外追加一项然后把数据库里取出来的数据追加到后面就要加 AppendDataBoundItems="true"

<asp:DropDownList ID="DropDownList1" runat="server" DataTextField="UName" DataValueField="AutoId" AppendDataBoundItems="true">  <asp:ListItem>请选择</asp:ListItem>  </asp:DropDownList>