Добавить новый элемент в уже связанный ListView в ASP Net (невозможно установить DataKeys / FieldName) - PullRequest
1 голос
/ 19 декабря 2011

Моя общая цель состоит в том, чтобы добавить поддельные / несвязанные элементы в элемент управления просмотра списка (для окончательного вывода из таблицы HTML).Это код для решения.Пользователи не будут добавлять элементы, так как они будут выведены в жесткую таблицу.

Я рассмотрел несколько примеров, и хотя раскрывающийся список прост, он не предназначен для просмотра списка.

Кодниже работает без ошибок, но мой элемент не отображается во время выполнения.Я думаю, что класс не устанавливает правильное имя поля элемента, но я не могу понять правильный синтаксис, чтобы исправить это.

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)

Вот класс Example1, который должен установить DataValueField:

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 ]

1 голос
/ 27 января 2012

В конце концов, я смог надежно решить эту проблему только с помощью решения на основе кода. Я сделал копию исходного источника данных, изменил свою копию и затем привязал к ней данные.

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

Не будет работать для всех, но в этом случае у меня работает нормально.

0 голосов
/ 20 декабря 2011

Еще один способ сделать это - ввести его в sql.

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

это гарантирует, что элемент всегда добавляется, и asp.net не нужно знать или заботиться.

Вы можете добавить это в SQL-запрос или добавить его из-за кода перед привязкой запроса. если вы не привязываете к SQL, вы также можете сделать это с любым элементом списка с помощью LINQ

0 голосов
/ 20 декабря 2011

Может быть несколько проблем с тем, как вы подходите к этому, в том числе то, что ListView уже привязан к данным, и что вы добавляете и вставляете newItem.

Когда у нас есть такой сценарий, мы используем один из двух подходов:

1) Добавьте новый элемент в источник данных, прежде чем источник будет привязан к данным.

2) Удалите привязку данных и вручную создайте каждый элемент списка, затем добавьте новый элемент в начале или конце цикла.

...