我遇到了dtaview的问题。我正在动态创建新的数据列,为它们分配值,并将它们添加到我的数据表中。在使用过滤器之前,绑定时这很好。所有值都出现了。
但是,我已经选择通过过滤(通过字母)来减少返回的结果,并且我返回的数据视图似乎不允许与新创建的数据列绑定。我已经挖掘了过滤后的视图,并且可以看到我需要的值存在。
我正在尝试避免在应用过滤器后将所有内容重新放回表中。基于字母的SQL查询是不可能的,因为整个原始表处于视图状态。
以下是一些代码段:
--Firstly create new datacolumn
Dim ICount As System.Data.DataColumn = New System.Data.DataColumn
ICount.DataType = System.Type.GetType("System.String")
ICount.AllowDBNull = True
ICount.ColumnName = "ICount"
register.Columns.Add(ICount)
--integer value is first calculated and then put into the datatable row
row("ICount") = IntegerCount.ToString()
--filtered view is created from datatable (returned from viewstate)
Dim filteredView As New Data.DataView(pTable, FilterExpression, "Surname", Data.DataViewRowState.OriginalRows)
--view is bound
grd.DataSource = filteredView
grd.DataBind()
--Markup
<asp:TemplateField HeaderText ="ICount" SortExpression="ICount">
<ItemTemplate>
<asp:Label ID="IC" runat="server" Text='<%# Bind("ICount") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
所有非动态数据列都很好。挖掘到数据表和过滤后的视图显示值都存在。
任何帮助都将非常感谢!!!
答案 0 :(得分:0)
好的 - 解决了这个问题。
问题在于我没有使用数据集。
因此,我应该完成以下工作,而不是创建新视图:
datTable = CType(ViewState(“datTable”),System.Data.DataTable)
datSet.Tables.Add(datTable)
datView = datSet.Tables(0).DefaultView
datView.RowFilter = FilterExpression
grd.DataSource = datView
grd.DataBind()
所有价值观现在都已经过去了。