2012-02-20 24 views
0

我有一個嵌入列表視圖(在另一個列表視圖中),並且這兩個列表視圖都可以成功執行CRUD操作。在嵌入列表視圖中使用DynamicControl的ASP.NET 4.0

asp的嵌入式列表視圖看起來是這樣的:

<asp:ObjectDataSource ID="objConcentrations" runat="server" 
     TypeName="PICUdrugs.BLL.infusionBL" DataObjectTypeName="PICUdrugs.DAL.infusionConcentration" 
     InsertMethod="insertConcentration" SelectMethod="getConcentrations" 
     deleteMethod="deleteConcentration" UpdateMethod="updateConcentration" 
     OldValuesParameterFormatString="orig{0}" ConflictDetection="CompareAllValues" 
     OnUpdated="objConcentrations_CRUD" OnInserted="objConcentrations_CRUD">      
     <SelectParameters>       
      <asp:Parameter Name="infDilutionID" Type="Int32"/>      
     </SelectParameters>     
</asp:ObjectDataSource> 
<asp:ListView ID="infusionConcListView" runat="server" DataSourceID="objConcentrations" 
     ItemPlaceholderID="itemPlaceHolder1" InsertItemPosition="LastItem" DataKeyNames="infusionConcentrationID" 
     OnDataBound="concentrationLV_allDataBound" EnableViewState="False"> 

與外部列表視圖上的嵌入式ObjectDataSource控件的選擇參數設置默認值等等的onItemDataBound事件:

protected void infDilutnLV_itemDataBound(object sender, ListViewItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListViewItemType.DataItem) 
    { 
     ObjectDataSource infConcentrations = e.Item.FindControl("objConcentrations") as ObjectDataSource; 
     ListViewDataItem dataItem = (ListViewDataItem)e.Item; 
     if (infConcentrations != null) 
     { 
      infusionDilution infDil = (infusionDilution)dataItem.DataItem; 
      Parameter parameter = infConcentrations.SelectParameters[0]; 
      parameter.DefaultValue = infDil.infusionDilutionID.ToString(); 
     } 
    } 
} 

objectDataSource然後使用數據訪問層中的實體框架。我已成立dataAnnotations爲實體類像這樣:

namespace PICUdrugs.DAL 
{ 
    [MetadataType(typeof(infusionDilutionMetaData))] 
    public partial class infusionDilution 
    { 
    } 
    public class infusionDilutionMetaData 
    { 
     [Range(0, 3000, ErrorMessage = "volume must be between 0 and 3000 ml")] 
     public int? finalVol { get; set; } 
    } 
    [MetadataType(typeof(infusionConcentrationMetaData))] 
    public partial class infusionConcentration 
    { 
    } 
    public class infusionConcentrationMetaData 
    { 
     [Range(0.001, 1000, ErrorMessage = "concentration must be between 0.001 and 1000 units/ml")] 
     public double Concentration { get; set; } 
    } 
} 

雖然dynamicControls被上外(非嵌套的)列表視圖完美的工作,當我改變在內部(嵌套的)列表視圖,以動態控制任何控制,我得到的錯誤:

Could not determine a MetaTable. A MetaTable could not be determined for the data source 'objConcentrations' and one could not be inferred from the request URL. Make sure that the table is mapped to the dats source, or that the data source is configured with a valid context type and table name, or that the request is part of a registered DynamicDataRoute. 

恐怕我非常業餘的程序員,而且我不確定它是否甚至有可能在嵌套列表視圖使用dynamicFields。是否有任何解決方法,或者我的代碼中有錯誤嗎?非常感謝您的幫助。

回答

0

我不敢相信我沒有看到這個 - 對不起,如果我浪費了任何人的時間。

雖然Page_Init設置外的ListView的EnableDynamicData,我需要使用OnInit的處理程序嵌套的ListView:

protected void infusionConcLV_init(object sender, EventArgs e) 
    { 
     ListView thisLV = (ListView)sender; 
     thisLV.EnableDynamicData(typeof(infusionConcentration)); 
    }