在ASP Net中将新项添加到已绑定ListView(无法设置DataKeys / FieldName)

时间:2011-12-19 19:58:56

标签: asp.net vb.net listview listviewitem

我的总体目标是将假/未绑定项添加到listview控件(最终HTML表输出原因)。这是一个代码隐藏的解决方案。用户不会添加项目,因为它将在严格的表格中输出。

我已经查看了几个示例,虽然这对于下拉列表很容易,但不适用于listview。

下面的代码可以正常运行,但我的项目不会在运行时显示。我认为该类没有正确设置item fieldname,但我无法找到正确的语法来修复它。

ColumnNameAList.DataSource = PeriodDataView
ColumnNameAList.DataBind()

Dim test As New Example1("ColumnNameA")

Dim newItem As New ListViewDataItem(ColumnNameAList.Items.Count, ColumnNameAList.Items.Count)
newItem.DataItem = test

ColumnNameAList.Items.Insert(ColumnNameAList.Items.Count, newItem)
ColumnNameAList.Items.Add(newItem)

这是应该设置DataValueField的Example1类:

Public Class Example1
Public Sub New(ColumnNameA__1 As String)
    ColumnNameA = ColumnNameA__1
End Sub

Private m_ColumnNameA As String

Public Property ColumnNameA() As String
    Get
        Return m_ColumnNameA
    End Get
    Set(value As String)
        m_ColumnNameA = value
    End Set
End Property

End Class

这会输出我的原始数据源列表,但不会输出添加的项目。

<ItemTemplate>
    <td>
        <%# Eval("ColumnNameA")%>

    </td>
</ItemTemplate>

3 个答案:

答案 0 :(得分:1)

最后,我只能通过代码隐藏解决方案可靠地解决这个问题。 我制作了原始数据源的副本,修改了我的副本,然后数据绑定到它。

Dim MyOriginalTableSource As Data.DataView = DataManager.example()
Dim ModifiedTable As DataTable = MyOriginalTableSource.ToTable
'do stuff here
Mylistbox.DataSource = ModifiedTable
Mylistbox.DataBind()

不适用于所有人,但在这种情况下,它对我来说很好。

答案 1 :(得分:0)

您接近此方式可能会遇到一些问题,包括ListView已经是数据绑定,并且您正在添加和插入newItem。

当我们有这样的场景时,我们采用以下两种方法之一:

1)在源绑定数据之前,将新项添加到数据源。

2)删除数据绑定并手动创建每个列表视图项,然后在循环的开头或结尾添加新项。

答案 2 :(得分:0)

另一种方法是将它注入sql。

select col1, col2, col3 from table1 union select '1','2','3'

这将确保始终添加项目,并且asp.net不需要知道或关心。

您可以将其添加到sql查询中,或者在绑定查询之前从后面的代码中添加它。如果你没有使用sql绑定,你也可以使用LINQ

对任何列表项执行此操作