通过敲牛腩视频我们知道对于显示数据的部分我们使用了一些专门控件用于显示数据,通过这些控件可以以可视化的方式查看绑定数据之后的效果。这些控件称之为数据绑定控件。
数据绑定控件的一些常用属性:
DataSource属性:指定数据绑定控件的数据来源,显示的时候程序将会从这个数据源中获取数据并显示。
DataSourceID属性:指定数据绑定控件的数据源控件的ID,显示的时候程序将会根据这个ID找到相应的数据源控件,并利用这个数据源控件中指定方法获取数据并显示。
DataBind()方法:当指定了数据绑定控件的DataSource属性或者DataSourceID属性之后,再调用DataBind()方法才会显示绑定的数据。并且在使用数据源时,会首先尝试使用DataSourceID属性标识的数据源,如果没有设置DataSourceID时才会用到DataSource属性标识的数据源。也就是说DataSource和DataSourceID两个属性不能同时使用。
在牛腩新闻发布系统中常用数据绑定控件:
GridView控件
GridView控件是一种复合型的控件,它使用表格形式实现多列数据的展示,GridView控件上使用的特效一般需要用客户端Javascript脚本,脚本方法可以直接写在.aspx文件上,也可以在绑定数据时,为控件增加该属性。GRIDVIEW生成的是TABLE,效率低,是因为TABLE在浏览器里加载的时候,是整个表一起加载,然后再呈现,从而有个“漫长”的等待时间,而且,使用TABLE导致的HTML代码也大很多。
代码:
<!----热点新闻----> <div id="hotnews" class="commonfrm"> <h4>热点新闻</h4> <asp:GridView ID="gvHotNews" runat="server" AutoGenerateColumns ="False" BorderWidth ="0" GridLines="None"> <Columns> <asp:TemplateField HeaderText="所属类别" HeaderStyle-CssClass ="th_category" > <ItemTemplate> <a class="td_category" href ='list.aspx?caid=<%#Eval("caId") %>'>[<%# Eval("name") %>]</a> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="新闻标题"> <ItemTemplate> <a href='newscontent.aspx?newsid=<%#Eval("id") %>' target ="_blank" title ='<%#Eval("title") %>'><%# StringTruncat( Eval("title").ToString(),18,"...") %></a> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="发布时间" HeaderStyle-CssClass="th_time" ItemStyle-CssClass ="td_time"> <ItemTemplate> <asp:Label ID="Label3" runat="server" Text='<%# Bind("createtime") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> </div>
web端:
protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { NewsManager nm = new NewsManager(); //绑定最新新闻 gvNewNews.DataSource = nm.SelectNewNews (); gvNewNews.DataBind(); //绑定热点新闻 gvHotNews.DataSource = nm.SelectHotNews(); gvHotNews.DataBind(); } }
Repeater控件
Repeater控件用于显示重复的项目列表,这些项目被限制在该控件。Repeater 控件是模板化的数据绑定列表,Repeater控件是“无外观的”,即:它不具有任何内置布局或样式,也就不会产生任何数据控制表格来控制数据的显示。因此,我们必须在控件的模板中明确声明所有 HTML布局标记、格式标记和样式标记。Repeater控件是个轻量级的数据绑定控件,一般用它来输出要求相对简单的数据
代码:
<asp:Repeater ID="repCategory" runat="server"> <ItemTemplate> <tr> <td ><%# Eval ("id")%></td> <td class="caname"><%# Eval ("name")%></td> <td > <asp:LinkButton ID="lbtnDelCa" runat="server" CommandArgument='<%# Eval("id")%>' OnClientClick="return confirm('删除类别会使其下新闻及评论全都删除,是否真的要删除?')" onclick="lbtnDelCa_Click">删除</asp:LinkButton> </td> </tr> </ItemTemplate> </asp:Repeater>
web 端:
protected void Page_Load(object sender, EventArgs e) { //判断session里面是否存在管理员 if (Session["admin"] != null && Session["admin"].ToString() == "niunan") { //已登录 if (!Page.IsPostBack ) { //页面第一次加载时绑定类别列表 DataTable dt=new CategoryManager().SelectAll(); repCategory.DataSource = dt; repCategory.DataBind(); } } else { //未登录 Response.Redirect("login.aspx"); } }
对比:
GRIDVIEW是表格,基本上固定生成表格,而REPEATER是重复,可以生成表格,也可以完全自定义DIV之类的输出,甚至应用于SELECT对象(GRIDVIEW是不可行的)
Repeater 控件使用数据源返回的一组记录呈现只读列表。Repeater 控件不指定内置布局。您可以使用模板创建 Repeater 控件的布局。
Gridview,DataList(也是常用数据绑定控件),Repeater
1. 共同点:
1)都是数据绑定的控件
2)用Eval输出都得用到模版才能输出
3)都能用数据源拖动的方式绑定,也可以在cs文件里用简洁的代码绑定
2. 不同点:
1)处理外观样式:
GridView:最不好处理
DataList:很好处理
Repeater:最好处理,可以非常完美的跟html处理美观样式功能一样
2)功能和性能:
GridView:功能最强大,提供分页,编辑,删除,选择等等很多功能,使用最方便。但性能最差,占用系统资源大,他的分页是把整个表的数据取出来,到gridview上分页的,因此如果数据量比较大的时候,速度非常非常慢。效率极低。 DataList:功能一般,最大的特别是可以实现显示几行几列,删除,编辑, 翻页,排序等功能都得自己手工实现。
Repeater:功能简单,效率高,容易灵活控制生成的HTML代码,分页需要自己实现。
总结:
从灵活性上讲肯定是Repeater更灵活,他只是循环内容,不用产生.net指定的一系列垃圾代码,但是同时他也失去了.net提供的部分功能。但是编译生成的html更为简单,因此效率 也相对要高