Проблема с изменением параметров удаления ObjectDataSource

#.net #vb.net #data-binding #objectdatasource

#.net #vb.net #привязка данных #objectdatasource

Вопрос:

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

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

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.objectdatasource .удаление(v = 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
  

Редактировать:
Ниже приведен мой код

 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. Вы уверены, что вызов Clear вызывает исключение? Что именно является сообщением об ошибке? Свойство доступно только для чтения, но, конечно, это просто означает, что вы не можете изменить, какая коллекция e. InputParameters указывает на, но теперь я вижу причину, по которой вы не можете манипулировать самой коллекцией. (извините, я не могу больше помочь)

2. При любой попытке изменить идентификатор ParamsFromPage выдается ошибка.

Ответ №1:

Я нашел хороший обходной путь к решению, предложенному 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
  

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