Repeater 动态列问题

刚刚在论坛帮一位大大解决问题

他的是在Repeater里面的ItemTemplate里面有个循环,根据循环来动态绑定Repeater

 

 

下面引用 wangqiinfo 的帖子  <%#Eval("xx")%>中如何嵌套一个变量

代码是这个样子

  <%   
  for (int i = 0; i < lsbor.Count; i++)
  {
    
  if (lsbor[i].Istitle == "1") {  
  %>
  <td style="text-align: left;">
    
  <%#Eval("")%>
  </td>
  <%
  }
  }
  %>
我现在想给#Eval(“”)中绑定的列名是集合lsbor.titleid 属性 请各位大虾帮忙 在线等

 

本来我以为只要 <%#Eval(lsbor[i].titleid)%>这样子就可以绑定成功,可是经过测试这样是不行的   提示i变量没有定义

网上查了下帖子没有弄明白问什么,不过却找到了解决方案,

不过网上代码大多都是csdn上直接copy的,晦涩难懂。

经仔细研读自己写了个小demo,讲代码简化,提供大家看不懂msdn代码的可以先看下我的简化版

 

结果输出如下:

值:field1
值:field21值:field22
值:field31值:field32值:field33
值:field41值:field42值:field33值:field44

 

dataTable数据:

 

field1,  field2,   field3,   field4

field21,field22, field23, field24

field31,field32, field33, field34

field41,field42, field33, field44

 

 

自定义模板类

public class MyTemplate : System.Web.UI.ITemplate { static List<string> fields = null; static int itemcount = 0; public MyTemplate(List<string> field) { fields = field; } /*public void InstantiateIn(System.Web.UI.Control container) { PlaceHolder ph = new PlaceHolder(); ph.DataBinding += new EventHandler(Item_DataBinding); container.Controls.Add(ph); }*/ public void Item_DataBinding(object sender, System.EventArgs e) { itemcount += 1; PlaceHolder ph = (PlaceHolder)sender; RepeaterItem ri = (RepeaterItem)ph.NamingContainer; for (int i = 0; i < itemcount && i < fields.Count; i++) { ph.Controls.Add(new LiteralControl("值:" + (String)DataBinder.Eval(ri.DataItem, fields[i]))); } ph.Controls.Add(new LiteralControl("<br />")); } } 

后台代码

protected void Page_Load(object sender, EventArgs e) { DataTable dt = new DataTable(); dt.Columns.Add("field1"); dt.Columns.Add("field2"); dt.Columns.Add("field3"); dt.Columns.Add("field4"); dt.Rows.Add("field1", "field2", "field3", "field4"); dt.Rows.Add("field21", "field22", "field23", "field24"); dt.Rows.Add("field31", "field32", "field33", "field34"); dt.Rows.Add("field41", "field42", "field33", "field44"); List<string> fields = new List<string>(); fields.Add("field1"); fields.Add("field2"); fields.Add("field3"); fields.Add("field4"); Repeater1.ItemTemplate = new MyTemplate(fields); this.Repeater1.DataSourceID = null; this.Repeater1.DataSource = dt; this.Repeater1.DataBind(); } 

前台代码

<form id="form1" runat="server"> <div> <asp:Repeater ID="Repeater1" runat="server"> </asp:Repeater> </div> </form> 

理论性知识msdn上都有我这里就不加赘述了

 

原问题帖地址:http://topic.csdn.net/u/20100612/10/b8e20089-4718-4ab7-b2cc-21f229f501d4.html?seed=1215124475&r=66195153#r_66195153

参考资料

msdn地址:http://msdn.microsoft.com/zh-cn/library/cc438020(VS.71).aspx

不知道是不是原帖还是被转的,不过我看这篇是最正规的(^_^)

http://blog.csdn.net/llxchen/archive/2008/01/18/2051149.aspx

 

你可能感兴趣的:(object,server,String,null,Class,asp)