更新混合DetailsView(包含静态和动态字段)

时间:2011-12-12 17:29:22

标签: asp.net vb.net asp.net-ajax updatepanel detailsview

我有一个DetailsView,它在我的标记中定义了一些静态字段,并在VB代码隐藏中动态添加了一些额外的字段。应该注意DetailsView生活在UpdatePanel

假设我想获得一些仓库的库存信息,但我只想查看那些库存的库存信息。另外我还有一些静态信息,例如product,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 个答案:

答案 0 :(得分:1)

根据您的逻辑,我的猜测是您在使用新数据更新之前未清除SAPDetailsView。另请注意,通常需要在page_init事件中添加动态添加的字段,以便在回发后继续存在。

如果您只是将字段发送给用户并且不希望任何数据返回,那么这无关紧要,但您也不会回复任何字段。