【问题标题】:Problem Modifying ObjectDataSource deleting parameters修改ObjectDataSource删除参数的问题
【发布时间】:2011-05-26 14:36:16
【问题描述】:

我正在尝试将参数添加到 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

编辑: 以下是我的代码

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 是只读的,无法修改。”尝试添加到有序字典时抛出。

【问题讨论】:

  • 您确定对 Clear 的调用导致了异常吗?确切的错误消息是什么?该属性是只读的,但这当然意味着您不能修改 e.InputParameters 指向的集合,但我现在明白了为什么您不能操纵集合本身的原因。 (对不起,我帮不上忙)
  • 尝试修改 IDictionary ParamsFromPage 时会引发错误。

标签: .net vb.net data-binding objectdatasource


【解决方案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

我只是想知道是否有更好的方法从单元格中获取数据,以便更改列顺序不会破坏此代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    • 2023-02-08
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    相关资源
    最近更新 更多