asp.net中repeater控件用法笔记
2014-10-21来源:

大家可能都对datagrid比较熟悉,但是如果在数据量大的时候,我们就得考虑使用repeater作为我们的数据绑定控件了。repeater控件与datagrid (以及datalist)控件的主要区别是在于如何处理html。asp.net建立html代码以显示datagrid控件,但repeater允许开发人员决定如何显示数据。所以,你可以选择将数据显示在一个html表格中或者一个顺序列表中。这主要取决于你的选择,但你必须将正确的html插入到 asp.net页面中。

模板与datalist一样,repeater控件只支持模板。以下的模板可供选择:

alternatingitemtemplate: 指定如何显示每一其它选项。

itemtemplate: 指定如何显示选项。(alternatingitemtemplate可以覆盖这一模板。)

headertemplate: 建立如何显示标题。

footertemplate: 建立如何显示页脚。

separatortemplate: 指定如何显示不同选项之间的分隔符。

你可以使用这些模板来显示你希望的数据。唯一具有强制性的模板是itemtemplate,所有其它的模板都是具有选择性的。

对于处理一个数据源,repeater控件具有与datagrid与datalist相同的属性:

datamember:获得或者设置与 repeater 控件绑定的相应datasource属性的表格。

datasource:获得或者设置为 repeater 显示提供数据的数据源。

除此之外,还有一个items属性,你可以通过这一属性编程访问repeater数据中单一选项。它返回一个repeateritemcollection对象,为一组repeateritem对象的集合,代表 repeater 数据的每一行。

asp.net web数据控件还有其它一个共性:它们都使用databind方法来生成用户界面。调用这一方法可以返回并显示数据(假设datasource和 datamember属性设置正确)。在查看databind方法之前,我们先看看如何在一个web页面中使用一个repeater控件。

使用repeater控件

使用repeater控件的第一步骤是决定我们将要使用的数据源和字段。例如,我们将要使用sql server northwind数据库中的employees列表。web页面将显示职工的完整名字,地址,以及电话号码。html将使用div标记,用 repeater 模板来分隔内容。下面是 web 页面的 html 内容:

前台代码

代码如下:

编号 姓名 年龄 班级 零花
<%#eval(id)%> <%#eval(name)%> <%#eval(age)%> <%#eval(classid)%> <%#eval(salary)%>

后台代码

代码如下:

string sql = string.format(select * from person);

datatable dt = sqlhelper.helper.executequery(sql);

repeater1.datasource = dt;

repeater1.databind();

aspnetpager的使用方法:

首先注册<%@ register assembly=aspnetpager namespace=wuqi.webdiyer tagprefix=webdiyer %>

前台:

代码如下:

firstpagetext=首页 lastpagetext=尾页 layouttype=table nextpagetext=下一页

onpagechanging=aspnetpager1_pagechanging pageindexboxtype=dropdownlist

pagingbuttonlayouttype=span prevpagetext=上一页 showcustominfosection=left

showpageindexbox=always submitbuttontext=go textafterpageindexbox=页

textbeforepageindexbox=转到 width=450px pagesize=3>

后台:

代码如下:

private void addpages(repeater rpt,wuqi.webdiyer.aspnetpager anp,datatable dt)

{

pageddatasource pds = new pageddatasource();

pds.allowpaging = true;

pds.datasource = dt.defaultview;

anp.recordcount = dt.rows.count;//给分页控件指定当前总数

pds.pagesize = anp.pagesize;//确定分页,每页有n项

pds.currentpageindex = anp.currentpageindex - 1;//确定当前页数

rpt.datasource = pds;//绑定数据源

rpt.databind();

}

protected void aspnetpager1_pagechanging(object src, wuqi.webdiyer.pagechangingeventargs e)

{

aspnetpager1.currentpageindex = e.newpageindex;

bindpersondata();

}

例子

repeater控件动态添加、删除一行

代码如下:

repeater:

代码如下:

onitemdatabound=rptrequest_itemdatabound>

序号 明细编号

资产类型

使用工位

申请数量

发放的资产号(资产管理员填写)

<%# container.itemindex+1 %>

    

后台:

代码如下:

///

/// 绑定repeater的数据源

///

private void repeaterbinddata()

{

datatable dt = definedatatableschema(hfrptcolumns.value);

if (request[businessno] == null)

{

loaddata(dt);

}

else

{

loaddata(request[businessno].tostring(), dt);

}

rptrequest.datasource = dt;

rptrequest.databind();

}

private void loaddata(string businessno, datatable dt)

{

string strsql = select * from ems_equipmentrequestitem where bussinessno = '+ businessno +';

datatable dt_equipmentrequestitem = dbutility.dbhelpersql.query(strsql).tables[0];

//for (int i = 0; i < dt_equipmentrequestitem.rows.count; i++)

foreach (datarow dr in dt_equipmentrequestitem.rows)

{

datarow row = dt.newrow();

row[guid] = guid.newguid();

row[equrequestitemid] = dr[equrequestitemid].tostring();

row[equipmenttype] = dr[typeid].tostring();

row[station] = dr[stationid].tostring();

row[equipmentnum] = dr[equipmentnum].tostring();

row[equipmentids] = dr[equipmentids].tostring();

dt.rows.add(row);

}

}

///

/// repeater数据默认加载

///

///

private void loaddata(datatable dt)

{

//默认显示1行

for (int i = 0; i < 1; i++)

{

datarow row = dt.newrow();

dt.rows.add(row);

}

//为第一行加载一些数据

datarow row0 = dt.rows[0];

row0[guid] = guid.newguid();

row0[equrequestitemid] = ;

row0[equipmenttype] = ;

row0[station] = ;

row0[equipmentnum] = 1;//默认初始为1

row0[equipmentids] = ;

}

///

/// 根据repeater相对应的列名,定义数据源datatable的schema

///

/// 列名

///

public datatable definedatatableschema(string columns)

{

datatable dt = new datatable();

string[] columnsary = columns.split(',');

foreach (string str in columnsary)

{

dt.columns.add(str);

}

return dt;

}

protected void rptrequest_itemcommand(object source, repeatercommandeventargs e)

{

if (e.commandname == add)

{

system.web.ui.webcontrols.label lblguid = (system.web.ui.webcontrols.label)e.item.findcontrol(lblguid);

//首先,恢复数据源

datatable dt = definedatatableschema(hfrptcolumns.value);

foreach (repeateritem item in rptrequest.items)

{

datarow newrow = dt.newrow();

newrow[guid] = ((system.web.ui.webcontrols.label)item.findcontrol(lblguid)).text;

newrow[equrequestitemid] = ((system.web.ui.webcontrols.label)item.findcontrol(lblequrequestitemid)).text;

newrow[equipmenttype] = ((dropdownlist)item.findcontrol(ddlequipmenttype)).selectedvalue;

newrow[station] = ((dropdownlist)item.findcontrol(ddlstation)).selectedvalue;

newrow[equipmentnum] = ((textbox)item.findcontrol(txtreqequipmentnum)).text;

newrow[equipmentids] = ((textbox)item.findcontrol(txtequipmentids)).text;

dt.rows.add(newrow);

if (lblguid.text == ((system.web.ui.webcontrols.label)item.findcontrol(lblguid)).text)

{

//添加一行

datarow row = dt.newrow();

row[guid] = guid.newguid();

row[equipmenttype] = ;

row[station] = ;

row[equipmentnum] = 1;//默认初始为1

row[equipmentids] = ;

dt.rows.add(row);

}

}

rptrequest.datasource = dt;

rptrequest.databind();

}

else if (e.commandname == delete)

{

system.web.ui.webcontrols.label lblguid = (system.web.ui.webcontrols.label)e.item.findcontrol(lblguid);

//首先,恢复数据源

datatable dt = definedatatableschema(hfrptcolumns.value);

foreach (repeateritem item in rptrequest.items)

{

if (lblguid.text != ((system.web.ui.webcontrols.label)item.findcontrol(lblguid)).text)

{

datarow newrow = dt.newrow();

newrow[guid] = ((system.web.ui.webcontrols.label)item.findcontrol(lblguid)).text;

newrow[equrequestitemid] = ((system.web.ui.webcontrols.label)item.findcontrol(lblequrequestitemid)).text;

newrow[equipmenttype] = ((dropdownlist)item.findcontrol(ddlequipmenttype)).selectedvalue;

newrow[station] = ((dropdownlist)item.findcontrol(ddlstation)).selectedvalue;

newrow[equipmentnum] = ((textbox)item.findcontrol(txtreqequipmentnum)).text;

newrow[equipmentids] = ((textbox)item.findcontrol(txtequipmentids)).text;

dt.rows.add(newrow);

}

}

rptrequest.datasource = dt;

rptrequest.databind();

}

}

protected void rptrequest_itemdatabound(object sender, repeateritemeventargs e)

{

if (e.item.itemtype == listitemtype.item || e.item.itemtype == listitemtype.alternatingitem)

{

dropdownlist ddlequipmenttype_temp = e.item.findcontrol(ddlequipmenttype) as dropdownlist;

string sqlstr = @select distinct b.typeid,b.equipmentname + '_' + b.equipmenttype as 'equipmentname_equipmenttype'

from ems_equipmentinfo a

join ems_equipmenttype b on a.typeid = b.typeid and b.status = '1'

order by equipmentname_equipmenttype;

dataset ds = dbutility.dbhelpersql.query(sqlstr);

ddlequipmenttype_temp.datatextfield = equipmentname_equipmenttype;

ddlequipmenttype_temp.datavaluefield = typeid;

ddlequipmenttype_temp.datasource = ds;

ddlequipmenttype_temp.databind();

ddlequipmenttype_temp.selectedvalue = (e.item.findcontrol(lblequipmenttype) as system.web.ui.webcontrols.label).text;

dropdownlist ddlstation_temp = e.item.findcontrol(ddlstation) as dropdownlist;

string sqlstr2 = @select nodeid,line + '_' + stationname as 'line_stationname' from v_stations where status='1' order by line_stationname;

dataset ds2 = dbutility.dbhelpersql.query(sqlstr2);

ddlstation_temp.datatextfield = line_stationname;

ddlstation_temp.datavaluefield = nodeid;

ddlstation_temp.datasource = ds2;

ddlstation_temp.databind();

ddlstation_temp.selectedvalue = (e.item.findcontrol(lblstation) as system.web.ui.webcontrols.label).text;

textbox txtequids = e.item.findcontrol(txtequipmentids) as textbox;

txtequids.attributes.add(readonly, true);

if (request[businessno] != null)

{

(e.item.findcontrol(btnaddrow) as system.web.ui.webcontrols.button).visible = false;

(e.item.findcontrol(btndeleterow) as system.web.ui.webcontrols.button).visible = false;

string businessno = request[businessno].tostring();

bool isapplyuser = is_applyuser(session[currentuserid].tostring(), businessno, ems_equipmentrequest, requester);//是否为申请人本人

if (isapplyuser == true)

{

string requeststatus = httputility.urldecode(request[requeststatus].tostring(), system.text.encoding.utf8);//申请单的当前状态

if (requeststatus == 草稿 || requeststatus == 退回)

{

(e.item.findcontrol(btnaddrow) as system.web.ui.webcontrols.button).visible = true;

(e.item.findcontrol(btndeleterow) as system.web.ui.webcontrols.button).visible = true;

}

}

else

{

bool iscurrentappprovaler = is_currentappprovaler(session[currentuserid].tostring(), businessno);//是否为当前能做审批的人

if (iscurrentappprovaler == true)

{

string sql = select top 1 layername from ems_approvaler where bussinessno=' + businessno + '

+ and approvalstatus='n' order by appsequence ;

datatable dt = dbutility.dbhelpersql.query(sql).tables[0];

if (dt.rows.count != 0 && dt.rows[0][layername].tostring() == 资产管理员)

{

string reqnum = (e.item.findcontrol(txtreqequipmentnum) as textbox).text.trim();

txtequids.attributes.add(onclick, openwindow(' + txtequids.clientid + ',' + ddlequipmenttype_temp.selectedvalue + ',' + reqnum + '));

}

}

}

}

}

}

更多信息请查看IT技术专栏

2026公务员·事业单位培训课程试听报名

  • 报班类型
  • 姓名
  • 手机号
  • 验证码
推荐信息
Baidu
map