Проблема Модификации ObjectDataSource, удаляя параметры - PullRequest
1 голос
/ 26 мая 2011

Я пытаюсь добавить параметр к событию удаления ObjectDataSource, как в примере ниже из msdn. Я сгенерировал обработчик события для события удаления ObjectDataSource, и он имел ту же сигнатуру, что и в примере, однако, когда я пытаюсь очистить paramsFromPage, как в примере, я получаю ошибку, сообщающую, что paramsFromPage доступен только для чтения. Есть ли что-то, что мне нужно изменить где-то еще?

Этот пример взят со следующей страницы msdn:

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.objectdatasource.deleting%28v=VS.90%29.aspx

Private Sub NorthwindEmployeeDeleting(ByVal source As Object, ByVal e As ObjectDataSourceMethodEventArgs)

    ' The GridView passes the ID of the employee
    ' to be deleted. However, the business object, EmployeeLogic,
    ' requires a NorthwindEmployee parameter, named "ne". Create
    ' it now and add it to the parameters collection.
    Dim paramsFromPage As IDictionary = e.InputParameters

    If Not paramsFromPage("EmpID") Is Nothing Then

        Dim ne As New NorthwindEmployee(paramsFromPage("EmpID").ToString())
        ' Remove the old EmpID parameter.
        paramsFromPage.Clear()
        paramsFromPage.Add("ne", ne)


    End If
End Sub ' NorthwindEmployeeDeleting

EDIT: Вот мой код

Protected Sub QueueDataSource_Deleting(ByVal sender As Object, ByVal e As ObjectDataSourceMethodEventArgs) Handles QueueDataSource.Deleting
    Dim paramsFromPage As IDictionary = e.InputParameters
    Dim queue As New QueueData

    If Not paramsFromPage("QueueNamek__BackingField") Is Nothing Then
        queue.QueueNamek__BackingField = paramsFromPage("QueueNamek__BackingField")
    End If

    If Not paramsFromPage("ServerNamek__BackingField") Is Nothing Then
        queue.ServerNamek__BackingField = paramsFromPage("ServerNamek__BackingField")
    End If

    paramsFromPage.Add("queue", queue)
End Sub

Ошибка «OrderedDictionary доступен только для чтения и не может быть изменен». выбрасывается при попытке добавить в упорядоченный словарь.

1 Ответ

0 голосов
/ 27 мая 2011

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

Вот мое решение:

' Store the index of the row being deleted
Protected Sub QueueGrid_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles QueueGrid.RowDeleting
    rowChosen = e.RowIndex
End Sub

' Prepare parameter to be sent to deleting function
Protected Sub QueueDataSource_Deleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ObjectDataSourceMethodEventArgs) Handles QueueDataSource.Deleting
    Dim queue As QueueData = e.InputParameters("queue")

    With queue
        .QueueNamek__BackingField = QueueGrid.Rows(rowChosen).Cells(2).Text
        .ServerNamek__BackingField = QueueGrid.Rows(rowChosen).Cells(3).Text
    End With
End Sub

Мне просто интересно, есть ли лучший способ получитьданные из ячеек, чтобы изменение порядка столбцов не нарушало этот код.

...