在实际开发过程中,涉及到数据绑定,分页,以及一对多展示数据时,遇到这样的需求我们怎么解决呢?下面以帖子展示来逐一说明。

帖子主要由两部分组成,第一部分是发帖人的原创内容部分,第二部分是用户评论部分,这样的话,我们可以考虑用用户控件

第一步:创建原创内容部分的用户控件,代码如下

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="TalkTitle.ascx.cs" Inherits="TalkTitle" %>
<table>
<tr>
<td colspan="2">
帖子标题:<asp:Label runat="server" ID="lbBT"></asp:Label>
</td>
</tr>
<tr >
<td colspan="2">发帖人:<asp:Label runat="server" ID="lbFTR"></asp:Label></td>
</tr>
<tr>
<td colspan="2">发帖时间:<asp:Label runat="server" ID="lbFTSJ"></asp:Label></td>
</tr>
<tr>
<td colspan="2">帖子内容:<asp:Label runat="server" ID="lbNR"></asp:Label></td>
</tr>
</table>

第二部分:创建用户评论用户控件,代码如下

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Talks.ascx.cs" Inherits="Talks" %>

<asp:Repeater runat="server" ID="rpt">
<ItemTemplate>
<div>
<p style="background: gray;">评论人:<%# Eval("PLR") %>          评论时间:<%# Eval("PLSJ") %></p>
<p>评论内容:<%# Eval("PLNR") %></p>
</div>
</ItemTemplate>
</asp:Repeater>
<div>
当前总共记录数<asp:Label runat="server" ID="lbCount"></asp:Label>条,共<asp:Label runat="server" ID="lbPages"></asp:Label>页,当前第<asp:Label runat="server" ID="lbCurrent"></asp:Label>页    
<asp:HyperLink runat="server" ID="lkFirst">首页</asp:HyperLink>
<asp:HyperLink runat="server" ID="lkPrev">上一页</asp:HyperLink>
<asp:HyperLink runat="server" ID="lkNext">下一页</asp:HyperLink>
<asp:HyperLink runat="server" ID="lkLast">最后一页</asp:HyperLink>
</div>

两部分的用户控件创建完毕,接下来就是将这两个用户控件放入到主页面中。

第三步:创建主页面,容纳两部分的用户控件

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="test2.aspx.cs" Inherits="test2" ValidateRequest="false" EnableEventValidation="false" %>
<%@ Register Src="~/TalkTitle.ascx" TagName="TalkTitle" TagPrefix="uc1" %>
<%@ Register Src="~/Talks.ascx" TagName="Talks" TagPrefix="uc2" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title></title>
</head>
<body>
<form runat="server">
<div>
<uc1:TalkTitle runat="server" ID="talkTitle1" />
</div>
<div>
<uc2:Talks runat="server" ID="talks1" />
</div>
</form>
</body>
</html>

注意:主页面引用用户控件的方法。

好了,接下来就是对两个子页面的数据的绑定了,怎么操作呢?显然父页面要传递值给子页面,只有这样才能让子页面展示数据,下面是主页面向子页面传值的代码,具体传值见注释,代码如下:

    protected void Page_Load(object sender, EventArgs e)
{
string tzid;
if (Request.QueryString["TZID"] == null)
{
tzid = "01";
}
else
{
tzid = Request.QueryString["TZID"].ToString();
}
talkTitle1.TZID = tzid;//给子页面传值,TZID是子控件的属性
talks1.TZID = tzid;//给子页面传值
}

好了。父页面已经参数给子页面了,下面是子页面后台代码:

1)原创内容用户控件后台代码:

public partial class TalkTitle : System.Web.UI.UserControl
{
public string TZID; protected void Page_Load(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt.Columns.Add("TZID");
dt.Columns.Add("BT");
dt.Columns.Add("FTR");
dt.Columns.Add("FTSJ");
dt.Columns.Add("NR"); dt.Rows.Add("01", "前台调用后台事件和方法实现小结", "kingtiger", "2013-11-20 10:00:00", "在实际开发过程中,我们的HTML元素需要调用后台,而且需要让后台进行复杂运算后再进行数据重新绑定操作,遇到这样的问题怎么办呢?可能有人说在后台创建一个方法,该方法实现绑定数据操作,但是实际呢?结果不尽人意,它没有执行绑定的实现,而只是简单的执行一下方法但是前台无反应,为什么出现这样的情况?原来前台调用后台方法其实只是返回结果,对实现过程及元素组合变化不管不问,它只是关注执行后的结果,不为过程买单,那么有什么方法解决这个问题呢?想想?我们可不可以让前台HTML元素触发ASP.NET按钮来触发事件呢,同时隐藏这个按钮?让它去实现绑定操作。该技巧是可行的!!本楼主为了操作简单没有以绑定数据作为示例,而只是简单的打印数据,原理基本和绑定数据类似,代码如下:");
dt.Rows.Add("02", "有关C#特点", "kingtiger", "2013-11-20 10:00:00", "8888888rdfjdjfkdsfjkdsjfdskfjjfdfd");
dt.Rows.Add("03", "有关C#特点", "kingtiger", "2013-11-20 10:00:00", "8888888rdfjdjfkdsfjkdsjfdskfjjfdfd");
dt.Rows.Add("04", "有关C#特点", "kingtiger", "2013-11-20 10:00:00", "8888888rdfjdjfkdsfjkdsjfdskfjjfdfd");
dt.Rows.Add("05", "有关C#特点", "kingtiger", "2013-11-20 10:00:00", "8888888rdfjdjfkdsfjkdsjfdskfjjfdfd");
dt.Rows.Add("06", "有关C#特点", "kingtiger", "2013-11-20 10:00:00", "8888888rdfjdjfkdsfjkdsjfdskfjjfdfd"); DataRow dr = dt.Select(" TZID='" + TZID + "'")[0]; lbBT.Text = dr["BT"].ToString();
lbFTR.Text = dr["FTR"].ToString();
lbFTSJ.Text = dr["FTSJ"].ToString();
lbNR.Text = dr["NR"].ToString();
}
}

该后台代码实现获取主页面传递过来的参数值,然后选择内容绑定到用户控件前台。

2)用户评论用户控件代码,涉及到分页等操作,具体看代码注释:

public partial class Talks : System.Web.UI.UserControl
{
public string TZID; protected void Page_Load(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt.Columns.Add("TZID");
dt.Columns.Add("PLR");
dt.Columns.Add("PLSJ");
dt.Columns.Add("PLNR"); dt.Rows.Add("01", "张三", "2013-10-23 10:09:23", "沙发");
dt.Rows.Add("01", "李四", "2013-10-23 10:09:24", "顶!");
dt.Rows.Add("01", "王五", "2013-10-23 10:09:25", "好方法,值得借鉴");
dt.Rows.Add("01", "张七", "2013-10-23 10:09:26", "一般");
dt.Rows.Add("01", "张三", "2013-10-23 10:09:27", "还行吧");
dt.Rows.Add("01", "张一", "2013-10-23 10:09:28", "可以试着用一下");
dt.Rows.Add("01", "张二", "2013-10-23 10:09:29", "还行吧");
dt.Rows.Add("01", "李五", "2013-10-23 10:19:23", "好方法,值得借鉴");
dt.Rows.Add("01", "齐齐", "2013-10-23 10:29:23", "还行吧");
dt.Rows.Add("01", "一一", "2013-10-23 10:39:23", "fdfd");
dt.Rows.Add("01", "小明", "2013-10-23 10:49:23", "一般");
dt.Rows.Add("01", "小李", "2013-10-23 10:59:23", "好方法,值得借鉴"); dt.Rows.Add("01", "小李", "2013-10-23 11:09:23", "还行吧");
dt.Rows.Add("01", "张三", "2013-10-23 12:09:23", "3545423");
dt.Rows.Add("01", "张三", "2013-10-23 13:09:23", "一般");
dt.Rows.Add("01", "齐齐", "2013-10-23 14:09:23", "还行吧");
dt.Rows.Add("01", "张三", "2013-10-23 15:09:23", "76788778");
dt.Rows.Add("01", "小明", "2013-10-23 16:09:23", "好方法,值得借鉴");
dt.Rows.Add("01", "张三", "2013-10-23 17:09:23", "顶!");
dt.Rows.Add("01", "张七", "2013-10-23 18:09:23", "还行吧");
dt.Rows.Add("01", "张三", "2013-10-23 19:09:23", "nnntrtnnnnnn");
dt.Rows.Add("01", "王五", "2013-10-23 20:09:23", "一般");
dt.Rows.Add("01", "张三", "2013-10-23 21:09:23", "还行吧");
dt.Rows.Add("01", "小李", "2013-10-23 22:09:23", "顶!");
dt.Rows.Add("01", "kingtiger", "2013-10-23 23:09:23", "rererer6666666rere"); #region 此方法是不进行分页的
//rpt.DataSource = dt;
//rpt.DataBind();
#endregion #region 分页的情况
PagedDataSource pds = new PagedDataSource();
pds.DataSource = dt.DefaultView;
pds.AllowPaging = true;
lbCount.Text = dt.Rows.Count.ToString(); pds.PageSize = 3;
int currentPage = 1; lbPages.Text = pds.PageCount.ToString();
if (Request.QueryString["page"] != null)
{
currentPage = Convert.ToInt32(Request.QueryString["page"]);
}
pds.CurrentPageIndex = (currentPage-1);
lbCurrent.Text = (currentPage).ToString(); if (!pds.IsFirstPage)
{
lkPrev.NavigateUrl = Request.CurrentExecutionFilePath + "?TZID=" + TZID + "&page=" + (currentPage - 1);
lkFirst.NavigateUrl = Request.CurrentExecutionFilePath + "?TZID=" + TZID + "&page=1";
lkLast.NavigateUrl = Request.CurrentExecutionFilePath + "?TZID=" + TZID + "&page=" + pds.PageCount;
}
if (!pds.IsLastPage)
{
lkNext.NavigateUrl = Request.CurrentExecutionFilePath + "?TZID=" + TZID + "&page=" + (currentPage + 1);
lkFirst.NavigateUrl = Request.CurrentExecutionFilePath + "?TZID=" + TZID + "&page=1";
lkLast.NavigateUrl = Request.CurrentExecutionFilePath + "?TZID=" + TZID + "&page=" + pds.PageCount;
} rpt.DataSource = pds;
rpt.DataBind();
#endregion
}
}

实现效果展示:

Repeater实例应用的更多相关文章

  1. asp:Repeater实例备忘

    1.前置部分 <asp:Repeater ID="rptPlanNo" runat="server" OnItemDataBound="rptP ...

  2. 4. Repeater 实例2

    设计管理一个用户程序,对用户的状态进行管理,当用户状态是启用时整行显示红色. 设计思路:用Repeater遍历每行记录,在操作状态的表格中旋转两个按钮,一个为启用功能,另一个为禁用功能,根据Repea ...

  3. .NET C#基础(3):事件 - 不便处理的事就委托出去

    0. 文章目的   本文面向有一定.NET C#基础知识的学习者,介绍.NET中事件的相关概念.基本知识及其使用方法 1. 阅读基础   理解C#基本语法(方法的声明.方法的调用.类的定义) 2. 从 ...

  4. 最近学习工作流 推荐一个activiti 的教程文档

    全文地址:http://www.mossle.com/docs/activiti/ Activiti 5.15 用户手册 Table of Contents 1. 简介 协议 下载 源码 必要的软件 ...

  5. {Repeater控件} Repeater控件的用法流程及实例

    一.Repeater控件的用法流程及实例: 1.首先建立一个网站,新建一个网页index.aspx. 2.添加或者建立APP_Data数据文件,然后将用到的数据库文件放到APP_Data文件夹中. 3 ...

  6. Webform(五)——内置对象(Response、Request)和Repeater中的数据增删改

    一.内置对象 (一)Response对象 1.简介:response 对象在ASP中负责将信息传递给用户.Response对象用于动态响应客户端请求,并将动态生成的响应结果返回到客户端浏览器中,使用R ...

  7. Repeater用法

    Repeater用法: 使用Repeater可以绘制表头.表内.表尾比较复杂的表格,如以下实例: <asp:Repeater ID="Repeater1" runat=&qu ...

  8. Repeater控件使用中的一些小问题

    网页上用来展示列表的数据,发现还是Repeater比GridView,DetailView之类的要灵活些,所以近期用到了就总结下遇到的一些情况,保留下来以备之后查阅,不用现问度娘了... 自己摸索的, ...

  9. .NET运用AJAX 总结及其实例

    1.AJAX简介 (1.没有AJAX会怎么样?普通的ASP.Net每次执行服务端方法的时候都要刷新当前页面,比如实现显示服务器的时间.每次都要刷新页面的坏处:页面刷新打断用户操作.速度慢.增加服务器的 ...

随机推荐

  1. php下删除一篇文章生成的多个静态页面

    php自定义函数之删除一篇文章生成的多个静态页面,可能有多页的文章,都是需要考虑到的. 复制代码代码如下: //– 删除一篇文章生成的多个静态页面  //– 生成的文章名为 5.html 5_2.ht ...

  2. linux计划任务运行php文件的方法分享

    在linux下,借助crontab,设置计划任务每天6点10分执行filename.php文件,写入一行时间到log日志中. 创建计划任务的脚本: dos2unix /path/to/filename ...

  3. uniquery 配合 mssql 自带存储过程实现分页

    --使用系统存储过程实现的通用分页存储过程 -- 此过程原作者,应该是:邹健老前辈 CREATE PROC sp_PageView @sql ntext, --要执行的sql语句 , --要显示的页码 ...

  4. CentOS7安装性能监控系统

    目录 系统描述. 开发环境. 开始之前. 安装influxdb数据库. 安装collectd 安装Grafana FAQ       influxdb的web界面没反应.   系统描述 想打造 New ...

  5. C++ list 类学习笔记

    双向循环链表list list是双向循环链表,,每一个元素都知道前面一个元素和后面一个元素.在STL中,list和vector一样,是两个常被使用的容器.和vector不一样的是,list不支持对元素 ...

  6. call callb callp区别

    对于刚刚接触ILE模式开发的初级菜鸟而言,想要搞清楚这三者的区别还是有点难度的.网上虽然一些帖子对这三者进行了比较,但是这些帖子或是语焉不详,或是高度概括.对于老鸟来说或许已经足矣,但是对于初级菜鸟而 ...

  7. 文件大小的友好输出及其 Python 实现

    在数据库中存储时,使用 Bytes 更精确,可扩展性和灵活性都很高. 输出时,需要做一些适配. 1. 注意事项与测试代码 需要考虑 sizeInBytes 为 None 的场景. 除以 1024.0 ...

  8. 别让emacs损伤你的小母指

    刚接触emacs时感觉,这东西怎么这么难用,还说是编辑器的神,我去. 写个代码跟挫游戏机手柄似的,关键是还这么难挫,平时用的最多的左ctrl键,这么难按,可怜的我的小母指(Petyr Baelish) ...

  9. fedora -- java多版本切换

    一般java开发时会下载多个版本的SDK,所以需要多个版本中进行切换 1. 设置JAVA_HOME环境变量需要打开.bashrc文件 2. 安装时使用alternatives将不同版本的java连接到 ...

  10. VC++入门精通视频教程

    1.1.Windows程序运行原理-1 上传日期:2012-03-19 09:18:50  相关摘要:  - 在关闭一个windows窗口时,也关闭另一个吗 - 对纯面向对象的PHP程序有何看法? - ...