0

我正在使用 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 中的字段?

4

1 回答 1

0

所以答案在于通过将字段转换为 TemplateFields 然后在模板中使用 HiddenField 来隐藏 DetailsView 中的字段。

然后,您需要像这样处理 DetailsView1_ItemInserting() 事件:

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

该事件接收 DetailsViewInsertEvenrArgs ("e"),其中包含一个名为 Values 的字典对象。在我的例子中,Values 包含传回数据源控件(EntityDataSource)的数据。

于 2012-08-22T15:28:36.960 回答