【发布时间】:2011-12-12 17:29:21
【问题描述】:
我有一个DetailsView,它在我的标记中定义了一些静态字段,并在 VB 代码隐藏中动态添加了一些额外的字段。需要注意的是,DetailsView 存在于UpdatePanel 中。
假设我想获取一些仓库的库存信息,但我只想查看那些有库存的仓库。另外我还有一些静态信息,比如产品、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>
【问题讨论】:
标签: asp.net vb.net asp.net-ajax updatepanel detailsview