2012-08-22 66 views
0

我正在使用DetailsView控件(C#4.0)添加具有EntityDataSource控件的記錄。有些字段需要添加,我不想在DetailsView控件中顯示 - 如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中的字段?

回答

0

所以答案在於隱藏DetailsView中的字段,方法是將它們轉換爲TemplateField,然後在模板中使用HiddenField。

然後您需要處理DetailsView1_ItemInserting()事件,像這樣:

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

事件接收DetailsViewInsertEvenrArgs( 「E」),內含值的字典對象。值包含傳遞給您的數據源控件(一個EntityDataSource)在我的情況下的數據。

+0

另外值得注意的是在TemplateFields,BoundFields等有一個名爲「InsertVisible」(布爾值)的屬性,您可以選擇在插入模式下顯示或隱藏一個字段。 –