我以编程方式在中继器内创建一个表。我的问题是,项目模板部分中的单元格无法正确呈现。它们在表格标记后显示为文本节点。有没有人有关于如何正确获取表格单元格的建议?

using System;

using System.Collections.Generic;

using System.Web.UI;

using System.Web.UI.HtmlControls;

using System.Web.UI.WebControls;

namespace WebApplication1

{

public partial class WebForm2 : Page

{

protected void Page_Load(object sender, EventArgs e)

{

if (!IsPostBack)

{

var dogs = new List

{

new Dog { Name = "Rex", Breed = "Russell Terrier" },

new Dog { Name = "Fido", Breed = "Poodle" },

new Dog { Name = "Fetcher", Breed = "Golden Retriever" },

};

var repeater = new Repeater { ID = "Repeater1" };

repeater.DataSource = dogs;

repeater.DataBind();

AddHeader(repeater);

AddItems(repeater, dogs);

PlaceHolder1.Controls.Add(repeater);

}

}

private void AddHeader(Repeater repeater)

{

var repeaterItem = new RepeaterItem(0, ListItemType.Header);

var table = new HtmlTable();

var row = new HtmlTableRow();

var cell1 = new HtmlTableCell("th") { InnerText = "Name" };

var cell2 = new HtmlTableCell("th") { InnerText = "Breed" };

row.Cells.Add(cell1);

row.Cells.Add(cell2);

table.Rows.Add(row);

repeaterItem.Controls.Add(table);

repeater.Controls.Add(repeaterItem);

}

private void AddItems(Repeater repeater, List dogs)

{

for (var i = 0; i < repeater.Items.Count; i++)

{

var repeaterItem = new RepeaterItem(i + 1, ListItemType.Item);

var row = new HtmlTableRow();

var cell1 = new HtmlTableCell() { InnerText = dogs[i].Name };

var cell2 = new HtmlTableCell() { InnerText = dogs[i].Breed };

row.Cells.Add(cell1);

row.Cells.Add(cell2);

repeaterItem.Controls.Add(row);

repeater.Controls.Add(repeaterItem);

}

}

private sealed class Dog

{

public string Breed { get; set; }

public string Name { get; set; }

}

}

}更新:感谢Rob的帮助,我能够使代码工作。现在我有一个全功能的Repeater被完全加载到代码隐藏的数据绑定中。太好了!

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web.UI;

using System.Web.UI.HtmlControls;

using System.Web.UI.WebControls;

using ExtensionMethods.WebControls;

namespace WebApplication1

{

public partial class WebForm1 : Page

{

protected void Page_Load(object sender, EventArgs e)

{

var dogs = new List

{

new Dog { Name = "Rex", Breed = "Russell Terrier" },

new Dog { Name = "Fido", Breed = "Poodle" },

new Dog { Name = "Fetcher", Breed = "Golden Retriever" },

};

var repeater = new Repeater

{

ID = "Repeater1",

HeaderTemplate = new CustomTemplate(ListItemType.Header),

ItemTemplate = new CustomTemplate(ListItemType.Item),

FooterTemplate = new CustomTemplate(ListItemType.Footer),

DataSource = dogs

};

repeater.DataBind();

PlaceHolder1.Controls.Add(repeater);

}

// Custom template class to add controls to the repeater's header, item and footer sections.

private sealed class CustomTemplate : ITemplate

{

private ListItemType ListItemType { get; set; }

public CustomTemplate(ListItemType type)

{

ListItemType = type;

}

public void InstantiateIn(Control container)

{

if (ListItemType == ListItemType.Header)

{

var table = new LiteralControl();

var head = new HtmlGenericControl("thead");

var row = new HtmlTableRow();

row.Cells.Add(new HtmlTableCell("th") { InnerText = "Breed" });

row.Cells.Add(new HtmlTableCell("th") { InnerText = "Name" });

head.Controls.Add(row);

table.Text = string.Format("

container.Controls.Add(table);

}

else if (ListItemType == ListItemType.Item)

{

var row = new HtmlTableRow();

var cell1 = new HtmlTableCell();

cell1.Controls.Add(new Literal { ID = "LiteralBreed" });

row.Cells.Add(cell1);

var cell2 = new HtmlTableCell();

cell2.Controls.Add(new Literal { ID = "LiteralName" });

row.Cells.Add(cell2);

container.Controls.Add(row);

container.DataBinding += new EventHandler(Container_DataBinding);

}

else if (ListItemType == ListItemType.Footer)

{

var footer = new LiteralControl("

");

container.Controls.Add(footer);

}

}

// Event handler to populate the dog's breed and name in the table when data-binding occurs.

private void Container_DataBinding(object sender, EventArgs e)

{

var item = sender as RepeaterItem;

if (item != null)

{

var dog = ((Dog)item.DataItem);

var breed = item.FindDescendantsByType().Single(x => x.ID == "LiteralBreed");

breed.Text = dog.Breed;

var name = item.FindDescendantsByType().Single(x => x.ID == "LiteralName");

name.Text = dog.Name;

}

}

}

private sealed class Dog

{

public string Breed { get; set; }

public string Name { get; set; }

}

}

}

repeater填充html,使用动态绑定到对象列表的ASP.NET Repeater创建HtmlTable相关推荐

  1. Spring IOC 容器源码分析 - 填充属性到 bean 原始对象

    1. 简介 本篇文章,我们来一起了解一下 Spring 是如何将配置文件中的属性值填充到 bean 对象中的.我在前面几篇文章中介绍过 Spring 创建 bean 的流程,即 Spring 先通过反 ...

  2. JAVA中如何将一个json形式的字符串转为json对象或对象列表

    import java.util.*; import java.text.SimpleDateFormat;import org.json.JSONObject; import org.json.JS ...

  3. windows不能查询组策略对象列表 解决方案

    域控事件日志有错误提示windows 不能查询组策略对象列表,下面列出解决方法: 解决: 1. 打开 C:\WINDOWS\SYSVOL\domain\Policies\{6AC1786C-016F- ...

  4. SAP CRM one order模型BOR类型支持的对象列表

    到数据库表CRMC_OBJECT_ASSI查询BOR type支持的one order对象列表: Created by Wang, Jerry on Mar 10, 2017 要获取更多Jerry的原 ...

  5. jax-rs jax-ws_JAX-RS 2.x与Spring MVC:返回对象列表的XML表示

    jax-rs jax-ws JSON是所有REST * API的王者,但是您仍然可能需要公开多种表示形式,包括XML. 使用JAX-RS和Spring MVC都非常简单. 实际上,唯一要做的就是用JA ...

  6. JAX-RS 2.x与Spring MVC:返回对象列表的XML表示

    JSON是所有REST * API的王者,但是您仍然可能需要公开多种表示形式,包括XML. 使用JAX-RS和Spring MVC都非常简单. 实际上,唯一要做的就是用JAXB注释对从API调用返回的 ...

  7. python中的对象列表_Python内建的对象列表

    Python内建的对象列表 刚写Python肯定会遇到这样的情况,想写些什么,但又不知从何写起... 在我看来问题在于我们不知道有什么东东可以拿来玩,这里列出Python的内建对象,稍微归类了一下,多 ...

  8. json vue 对象转数组_vue.js基于v-for实现批量渲染 Json数组对象列表数据示例

    本文实例讲述了vue.js基于v-for实现批量渲染 json数组对象列表数据.分享给大家供大家参考,具体如下: vuejs的出现减轻了对dom的直接操作,同时它提供的 v-for 渲染列表数据也给我 ...

  9. python将对象放入列表根据某个属性排序_关于python:如何根据对象的属性对对象列表进行排序?...

    我有一个python对象列表,我想按对象本身的属性排序.列表如下: >>> ut [, , , , , , ...] 每个对象都有一个计数: >>> ut[1].c ...

最新文章

  1. 大数据系统软件国家工程研究中心给大家拜年啦!
  2. 复旦邱锡鹏超全NLP预训练模型综述论文:两张图带你梳理完整脉络
  3. iphone编译时的注意事项
  4. Java8 CopyOnWriteArrayList 源码分析
  5. 跟我一起学.NetCore之Asp.NetCore启动流程浅析
  6. 一些ASP.NET不能调试问题的解决办法!
  7. tomcat7 加载el表达式 报错 使用tomcat8得以解决
  8. python时间模块设置_Python之时间和日期模块
  9. Python的subprocess模块(二)
  10. python 文本换行_Python学习入门(23)—读写文件
  11. Mac版PScc破解安装方法
  12. Web前端 ---入门教学
  13. js+canvas 图片+文字合成
  14. import java.io 是什么意思_Java IO 详解
  15. WinCC flexible的版本与安装移植软件
  16. 推荐几款常用的日志分析利器
  17. 【转】教你如何用手机连接电脑上网
  18. php获取alexa世界排名值的函数
  19. python 3维正态分布图_使用python绘制3维正态分布图的方法
  20. [HLSL]HLSL 入门参考 (dx11龙书附录B译文)

热门文章

  1. 本地连接时,通过localhost不能登陆到指定的端口
  2. SecureCRT的自动登录和自动脚本记录功能图解
  3. CentOS7,linux下nginx的安装过程——1.安装pcre与nginx——源码
  4. redis api-String
  5. Java 接口和抽象类的区别
  6. 具体knn算法概念参考knn代码python实现
  7. java-StringBuffer构造方法
  8. OC-数组排序-NSSortDescriptor使用
  9. Android加速度传感器实现“摇一摇”,带手机振动
  10. 二叉树前中后、层次遍历