日期:2014-05-18  浏览次数:20423 次

如何在repeater中动态绑定数据字段
repeater的数据的数据字段是不固定的动态查询所得,如有时会是3个字段,有时会是5个字段,字段及字段名称都不固定,如果系后台CS绑定数据到repeater

------解决方案--------------------
怎么会不固定?

能说说你的用途?

展示给用户的元素也不固定?
------解决方案--------------------
你在前台的代码中用 <%=string%> 后台写个公共的方法,动态生成字段就可以了
------解决方案--------------------
怎么能麻烦呢?
多简单啊!我都是这样做的
------解决方案--------------------
如此需求, 目前所有的复杂数据列表控件都不适合,

如果不需要特殊的要求,手动遍历 DataTable 输出,未尝不可
------解决方案--------------------
checkboxlist列出所有的这段
然后枚举已选项动态构造sql 语句
select A,C,D from得到数据源
datatable dt= ...........

绑定repeater的dataitembind事件
rep.dataitembind+=new ............
rep.datasource=dt;
rep.databind();

将repeater放在一个 <table> 当然,你也可以随便定义格式,只是一个示例,放置头部和数据模板
模板中放个literal
<table> <asp:repeater runat= "server " id= "rep " showheader= "true ">
<headerTemplate>
<asp:literal id= "lit_head "...........
</headertemplate>
<itemtemplate>
<asp:Literal id= "lit_item "...............
</itemtemplate>
</asp:repeater>
</table>

在itemdatabind事件中处理
if(e.itemtype==listitemtype.header){
//列举出所有的字段当头部
StringBuilder sb=new StringBuilder( " <tr> ");
for(int i=0;i <dt.columns.length;i++){
sb.appendformart( " <td> {0} </td> ",..............)
}
sb.append( " </tr> ");
( e.item.findcontrol( "lit_head ") as literal).Text=sb.tostring();
}
else if( //行或间隔行){
也一样的处理,不过这时候不是显示字段列表而是数据了,同样的构造一个html的tr行,让literal显示就行了
}