.net – 如何在代码中定义listview模板
发布时间:2020-05-23 19:43:19 所属栏目:asp.Net 来源:互联网
导读:我正在编写一个Composite控件,它包含一个listview来显示一个项目表.通常在Asp.NET中使用ListView时,我会在代码转发中定义模板. asp:ListView runat=server ID=ArticleList LayoutTemplate div class=ContentContainer di
|
我正在编写一个Composite控件,它包含一个listview来显示一个项目表.通常在Asp.NET中使用ListView时,我会在代码转发中定义模板. <asp:ListView runat="server" ID="ArticleList">
<LayoutTemplate>
<div class="ContentContainer">
<div runat="server" id="itemPlaceholder" />
</div>
</LayoutTemplate>
<ItemTemplate>
<div>
<div><%# Eval("Content") %></div>
</div>
</ItemTemplate>
</asp:ListView>
我假设它是这样的: ListView view = new ListView(); view.LayoutTemplate = ..... view.ItemTemplate = ..... // when do I call these? view.DataSource = myDataSource; view.DataBind(); 更新: private class LayoutTemplate : ITemplate
{
public void InstantiateIn(Control container)
{
var outer = new HtmlGenericControl("div");
var inner = new HtmlGenericControl("div") { ID = "itemPlaceholder" };
table.Rows.Add(row);
container.Controls.Add(table);
}
}
private class ItemTemplate : ITemplate
{
public void InstantiateIn(Control container)
{
var inner = new HtmlGenericControl("div");
container.Controls.Add(inner);
}
}
我可以使用以下方法添加它们: dataList.LayoutTemplate = new LayoutTemplate(); dataList.ItemTemplate = new ItemTemplate(); 但后来我卡住了,因为container.DataItem为null. 解决方法诀窍是订阅ItemTemplate中itemplaceholder的数据绑定事件.完整的解决方案: public class FibonacciControl : CompositeControl
{
public FibonacciControl()
{
// ....
}
protected override void CreateChildControls()
{
base.CreateChildControls();
ListView view = new ListView();
view.LayoutTemplate = new LayoutTemplate();
view.ItemTemplate = new ItemTemplate();
view.DataSource = FibonacciSequence();
view.DataBind();
this.Controls.Add(view);
}
private IEnumerable<int> FibonacciSequence()
{
int i1 = 0;
int i2 = 1;
for (int i = 0; i < Iterations; i++)
{
yield return i1 + i2;
int temp = i1 + i2;
i1 = i2;
i2 = temp;
}
yield break;
}
public int Iterations { get; set; }
private class LayoutTemplate : ITemplate
{
public void InstantiateIn(Control container)
{
var ol = new HtmlGenericControl("ol");
var li = new HtmlGenericControl("li") { ID = "itemPlaceholder" };
ol.Controls.Add(li);
container.Controls.Add(ol);
}
}
private class ItemTemplate : ITemplate
{
public void InstantiateIn(Control container)
{
var li = new HtmlGenericControl("li");
li.DataBinding += DataBinding;
container.Controls.Add(li);
}
public void DataBinding(object sender,EventArgs e)
{
var container = (HtmlGenericControl)sender;
var dataItem = ((ListViewDataItem)container.NamingContainer).DataItem;
container.Controls.Add( new Literal(){Text = dataItem.ToString() });
}
}
} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 在asp.net-mvc中,有没有办法区分处于兼容模式的IE7用户和IE
- asp.net-mvc – IIS7 ASP.NET MVC客户端缓存标头不起作用
- asp.net-web-api – 如何确保ASP.net Web API控制器的参数不
- asp.net-mvc-3 – 如何模拟查询字符串
- asp.net – 将单选按钮与相应的标签对齐
- asp.net-mvc – ASP.NET Web Api – 将对象发布到自定义动作
- asp.net-mvc – ASP.NET MVC Validation将类添加到包含div
- .net – 实现UserManager以使用自定义类和存储过程
- asp.net-mvc – WebAPI ModelBinder错误
- asp.net – NodaTime转换(第2部分).如何?
推荐文章
站长推荐
- asp.net-membership – 如何在成员资格提供者上实
- asp.net-mvc-3 – 如何在控制器方法的新选项卡中
- asp.net – 无法加载类型’site._Default[已关闭
- asp.net-mvc-3 – 从HttpContext.Current访问Tem
- asp.net – Response.Write和UpdatePanel
- ASP.NET隐藏字段与不可见的文本框
- 在ASP.NET/IIS的URL中使用冒号(:)
- asp.net – 滚动的Log4Net日志文件中的自定义文件
- ASP.NET API(MVC) 对APP接口(Json格式)接收数据与
- 授权 – ASP.NET Web API基本身份验证授权标头
热点阅读
