从DetailsView插入额外的自定义字段

时间:2012-08-22 13:44:56

标签: c# .net detailsview

我使用DetailsView控件(C#4.0)添加带有EntityDataSource控件的记录。有些字段需要添加,我不想在DetailsView控件中显示 - 例如DateAdded和UserId - 这些字段应该自动添加。

<asp:EntityDataSource ID="edsTasks" runat="server" 
    ContextTypeName="EKIMV2_MasterModel.EKIMV2_MasterEntities" 
    EnableFlattening="False" EnableInsert="True"
    EntitySetName="tasks" ConnectionString="name=EKIMV2_MasterEntities" 
    DefaultContainerName="EKIMV2_MasterEntities">
</asp:EntityDataSource>

<asp:DetailsView ID="DetailsView1" runat="server" Height="50px" Width="125px" 
    DataSourceID="edsTasks" DefaultMode="Insert" 
    AutoGenerateRows="False" DataKeyNames="task_id" 
    oniteminserted="DetailsView1_ItemInserted" 
    oniteminserting="DetailsView1_ItemInserting">
    <Fields>
        <asp:BoundField DataField="task_name" HeaderText="task_name" 
            SortExpression="task_name" />
        <asp:BoundField DataField="task_desc" HeaderText="task_desc" 
            SortExpression="task_desc" />
        <asp:TemplateField HeaderText="assigned_to" SortExpression="assigned_to">
            <InsertItemTemplate>
                <asp:DropDownList ID="ddlUsers" runat="server" DataSourceID="edsUsers" DataTextField="UserName" DataValueField="UserId"></asp:DropDownList>
            </InsertItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label1" runat="server" Text='<%# Bind("assigned_to") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:CommandField ButtonType="Button" ShowCancelButton="False" 
            ShowInsertButton="True" />
    </Fields>
</asp:DetailsView>

如上所示,没有DateAdded字段。我想自动将此值设置为今天的日期。用户无需添加值或完全查看字段。我想自动设置其他字段,但是没有太多细节,我认为DateAdded字段提供了一个很好的例子。

我想我需要以某种方式在ItemInserting事件中添加额外的字段,但我不知道从哪里开始。

protected void DetailsView1_ItemInserting(object sender, DetailsViewInsertEventArgs e)
{

}

我在其他地方读过,也许我需要在DetailsView中保留额外的字段但是隐藏它们?这是对的,这似乎不是正确的事情。

那么可以将值添加到实际上不在DetailsView中的字段吗?

1 个答案:

答案 0 :(得分:0)

所以答案在于隐藏DetailsView中的字段,方法是将它们转换为TemplateFields,然后在模板中使用HiddenField。

然后你需要处理DetailsView1_ItemInserting()事件,如下所示:

protected void DetailsView1_ItemInserting(object sender, DetailsViewInsertEventArgs e)
{
    e.Values["date_submitted"] = DateTime.Now.ToShortDateString();
}

事件接收DetailsViewInsertEvenrArgs(“e”),其中包含名为Values的字典对象。值包含在我的情况下传递回数据源控件(EntityDataSource)的数据。