刚刚在论坛帮一位大大解决问题
他的是在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