0

DetailsView コントロール (C# 4.0) を使用して、EntityDataSource コントロールでレコードを追加しています。DateAdded や UserId など、DetailsView コントロールに表示したくない追加が必要なフィールドがいくつかあります。これらのフィールドは自動的に追加する必要があります。

<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

答えは、DetailsView のフィールドを TemplateFields に変換して非表示にし、テンプレート内で HiddenField を使用することにあります。

次に、次のように DetailsView1_ItemInserting() イベントを処理する必要があります。

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

このイベントは、Values という辞書オブジェクトを含む DetailsViewInsertEvenrArgs ("e") を受け取ります。私の場合、値にはデータソース コントロール (EntityDataSource) に返されるデータが含まれます。

于 2012-08-22T15:28:36.960 に答える