我是 Asp.net 的新手,已经四处寻找如何做到这一点,但一直找不到。
我想完全从代码隐藏创建一个详细信息视图。这是因为我需要根据用户的权限加载某些字段。此外,我希望能够编辑详细信息视图,使其仅对某些用户开放。有没有办法做到这一点?
这是一个非常基本的 DetailsView 以编程方式实现。这会让你开始。
protected void Page_Load(object sender, EventArgs e)
{
DetailsView dv = new DetailsView();
dv.ID = "MyDv";
dv.DataSource = GetDataSet(); // returns a dataset filled using Select Query
TemplateField tf = new TemplateField();
tf.ItemTemplate = new AddTemplateToDetailsView(ListItemType.Item);
dv.Fields.Add(tf);
dv.DataBind();
placeholder1.Controls.Add(dv);
}
类文件代码添加模板字段。<asp:TemplateField>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI;
using System.Data;
public class AddTemplateToDetailsView : ITemplate
{
private ListItemType _ListItemType;
public AddTemplateToDetailsView(ListItemType listItemType)
{
_ListItemType = listItemType;
}
public void InstantiateIn(System.Web.UI.Control container)
{
if (_ListItemType == ListItemType.Item)
{
Label lblID = new Label();
lblID.DataBinding += new EventHandler(lblID_DataBinding);
container.Controls.Add(lblID);
}
}
void lblID_DataBinding(object sender, EventArgs e)
{
Label lblID = (Label)sender;
DetailsView container = (DetailsView)lblID.NamingContainer;
lblID.Text = ((DataRowView)container.DataItem)["CustomerID"].ToString();
}
}
如果您还需要添加InsertItemTemplate
OR EditItemTemplate
,您可以为其创建 UserControls 并将其添加Page_Init()
如下。UserControl 必须继承ITemplate
。
protected void Page_Init(object sender, EventArgs e)
{
this.DetailsView1.EditItemTemplate = Page.LoadTemplate("UserControlEdit.ascx");
this.DetailsView1.InsertItemTemplate = Page.LoadTemplate("UserControlInsert.ascx");
}
在此处阅读MSDN。
完成 RC 回答:在 dataBinding 方法中,如果数据源不是 DataRowView,您可以使用:
lblID.Text = DataBinder.Eval(dv.DataItem,"CustomerID").ToString();
这个对我有用。我在这个论坛上找到了好几次。