repeater填充html,使用动态绑定到对象列表的ASP.NET Repeater创建HtmlTable
我以编程方式在中继器内创建一个表。我的问题是,项目模板部分中的单元格无法正确呈现。它们在表格标记后显示为文本节点。有没有人有关于如何正确获取表格单元格的建议?
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相关推荐
- Spring IOC 容器源码分析 - 填充属性到 bean 原始对象
1. 简介 本篇文章,我们来一起了解一下 Spring 是如何将配置文件中的属性值填充到 bean 对象中的.我在前面几篇文章中介绍过 Spring 创建 bean 的流程,即 Spring 先通过反 ...
- JAVA中如何将一个json形式的字符串转为json对象或对象列表
import java.util.*; import java.text.SimpleDateFormat;import org.json.JSONObject; import org.json.JS ...
- windows不能查询组策略对象列表 解决方案
域控事件日志有错误提示windows 不能查询组策略对象列表,下面列出解决方法: 解决: 1. 打开 C:\WINDOWS\SYSVOL\domain\Policies\{6AC1786C-016F- ...
- SAP CRM one order模型BOR类型支持的对象列表
到数据库表CRMC_OBJECT_ASSI查询BOR type支持的one order对象列表: Created by Wang, Jerry on Mar 10, 2017 要获取更多Jerry的原 ...
- jax-rs jax-ws_JAX-RS 2.x与Spring MVC:返回对象列表的XML表示
jax-rs jax-ws JSON是所有REST * API的王者,但是您仍然可能需要公开多种表示形式,包括XML. 使用JAX-RS和Spring MVC都非常简单. 实际上,唯一要做的就是用JA ...
- JAX-RS 2.x与Spring MVC:返回对象列表的XML表示
JSON是所有REST * API的王者,但是您仍然可能需要公开多种表示形式,包括XML. 使用JAX-RS和Spring MVC都非常简单. 实际上,唯一要做的就是用JAXB注释对从API调用返回的 ...
- python中的对象列表_Python内建的对象列表
Python内建的对象列表 刚写Python肯定会遇到这样的情况,想写些什么,但又不知从何写起... 在我看来问题在于我们不知道有什么东东可以拿来玩,这里列出Python的内建对象,稍微归类了一下,多 ...
- json vue 对象转数组_vue.js基于v-for实现批量渲染 Json数组对象列表数据示例
本文实例讲述了vue.js基于v-for实现批量渲染 json数组对象列表数据.分享给大家供大家参考,具体如下: vuejs的出现减轻了对dom的直接操作,同时它提供的 v-for 渲染列表数据也给我 ...
- python将对象放入列表根据某个属性排序_关于python:如何根据对象的属性对对象列表进行排序?...
我有一个python对象列表,我想按对象本身的属性排序.列表如下: >>> ut [, , , , , , ...] 每个对象都有一个计数: >>> ut[1].c ...
最新文章
- 大数据系统软件国家工程研究中心给大家拜年啦!
- 复旦邱锡鹏超全NLP预训练模型综述论文:两张图带你梳理完整脉络
- iphone编译时的注意事项
- Java8 CopyOnWriteArrayList 源码分析
- 跟我一起学.NetCore之Asp.NetCore启动流程浅析
- 一些ASP.NET不能调试问题的解决办法!
- tomcat7 加载el表达式 报错 使用tomcat8得以解决
- python时间模块设置_Python之时间和日期模块
- Python的subprocess模块(二)
- python 文本换行_Python学习入门(23)—读写文件
- Mac版PScc破解安装方法
- Web前端 ---入门教学
- js+canvas 图片+文字合成
- import java.io 是什么意思_Java IO 详解
- WinCC flexible的版本与安装移植软件
- 推荐几款常用的日志分析利器
- 【转】教你如何用手机连接电脑上网
- php获取alexa世界排名值的函数
- python 3维正态分布图_使用python绘制3维正态分布图的方法
- [HLSL]HLSL 入门参考 (dx11龙书附录B译文)