2011-12-12 33 views
0

我有一個DetailsView其中有一些靜態字段在我的標記中定義,並在VB代碼隱藏中動態添加一些額外的字段。應該指出DetailsView住在UpdatePanel更新混合DetailsView(具有靜態和動態字段)

假設我想獲得多個倉庫的庫存信息,但我只想看看那些庫存在手。此外,我有一些靜態信息,如產品,SKU等

我遇到的問題是,每次我點擊「詳細信息」按鈕,它會繼續追加動態字段到最後,渲染表格。我想我要麼需要一個條件,要麼告訴它以某種方式重新渲染。我懷疑這個問題是由於我使用了UpdatePanel而引起的,但對於我的客戶的用戶體驗來說保持這一點很重要。

'Warehouse Stock by Location 
Dim stockDT As New DataTable 
For Each row As DataRow In stockDT.Rows 'Add column for each Warehouse that has stock 
    'Adds the fields to the DetailsView dynamically for Warehouses with stock. 
    Dim col As New DataColumn(WarehouseLocID + row(WarehouseLocID).ToString) 
    Dim bf As New BoundField 
    bf.HeaderText = "Warehouse " + row(WarehouseLocID) 
    bf.DataField = col.ColumnName 

    'NEED HELP HERE! HOW TO UPDATE OR RE-CREATE THE DETAILSVIEW TO REFLECT NEW INFO? 
    If Not SAPDetailsView.HasControls Then 'BROKEN 
     SAPDetailsView.Fields.Add(bf) 
    Else 
     SAPDetailsView.Fields.Item(0).HeaderText = bf.DataField 'UPDATES THE WRONG "ITEM" FIELD VALUE!! 
    End If 
Next 

這是非常基本的標記。

<asp:UpdatePanel ID="statusUpdatePanel" runat="server"> 
<ContentTemplate> 
    <asp:GridView ID="ProductsTable" DataSourceID="ProductsSDS"> 
     <Columns> 
      <asp:ButtonField ButtonType="Button" Text="Details" CommandName="Select" /> 
     </Columns> 
    </asp:GridView> 
    <asp:DetailsView ID="WarehouseStock" runat="server" AutoGenerateRows="False"> 
     <Fields> 
      <asp:BoundField HeaderText="Product" DataField="Product" /> 
      <asp:BoundField HeaderText="Unit Price" DataField="UnitPrice" /> 
      <asp:BoundField HeaderText="SKU" DataField="SKU" /> 
     </Fields> 
    </asp:DetailsView> 
    <!-- The Dynamic Fields are appended in the codebehind --> 
</ContentTemplate> 
</asp:UpdatePanel> 

回答

1

根據你的邏輯,我的猜測是你沒有清理SAPDetailsView,然後用新數據更新它。還要注意,爲了生存回發,通常需要在page_init事件中添加動態添加的字段。

如果您只是將字段發送給用戶而不期望返回任何數據,那麼這並不重要,但您也不會收到任何回傳的字段。