从后面的代码创建详细信息视图

时间:2013-08-17 20:03:42

标签: c# asp.net

我是Asp.net的新手并且已经四处寻找如何做到这一点,但一直无法找到它。

我想完全从代码隐藏创建一个detailview。这是因为我需要根据用户的权限加载某些字段。此外,我希望编辑详细信息视图的功能只能由特定用户访问。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:2)

这是一个以编程方式完成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);

    }

添加TemlplateField的类文件代码。 <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();
    }

}

如果您还需要添加InsertItemTemplateEditItemTemplate,您可以为其创建UserControl,并在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 here

答案 1 :(得分:0)

完成R.C.回答: 在dataBinding方法中,如果datasource不是DataRowView,您可以使用:

lblID.Text = DataBinder.Eval(dv.DataItem,"CustomerID").ToString();

它对我有用。 我在这个论坛上发现了好几次。