对象引用未设置为实例-试图从列表项中获取DataRowView



我试图从列表项中的一行获得绑定值。我在每行上都有一个按钮,当单击该按钮时,将执行一个任务(向该列表项行中姓名和电子邮件地址的人发送电子邮件)。所以,我有一个事件处理程序绑定到listview,我试图得到底层的datarowview提取数据项。

以下是我在事件处理程序中的内容:
Protected Sub lvUsers_ItemCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ListViewCommandEventArgs) Handles lvUsers.ItemCommand
    Dim diCurrentUser As ListViewDataItem = CType(e.Item, ListViewDataItem)
    Dim drCurrentRow As DataRowView = CType(diCurrentUser.DataItem, DataRowView)
    Select Case e.CommandName
            Case "Email"
                Dim strEmailAddress As String = drCurrentRow("contact_email").ToString.Trim
                Dim strUserName As String = drCurrentRow("login").ToString.Trim
                Dim strUserID As String = drCurrentRow("username").ToString.Trim
                Dim strPassword As String = drCurrentRow("password").ToString.Trim

现在,它在我试图访问DataRowView对象中的contact_email元素的那一行失败了。

我做错了什么?

谢谢

您需要检查以下内容:

1)确保drCurrentRow IsNot Nothing在尝试访问其值之前。

2)如果drCurrentRow是有效的,在处理它之前确保它包含一个名为contact_email的列。例如:

If drCurrentRow.Row.Table.Columns.Contains("contact_email") Then

3)如果列确实存在,则需要检查该项的内容是否为Nothing和/或DBNull。在尝试对值执行操作之前,需要对值进行等价处理。例如:

If Not drCurrentRow.IsNull("contact_email") Then

所以,你的一部分代码代码重写如下:

Public Function GetRowStringValue(oRowView As DataRowView, sColumnName As String) As String
   If oRowView IsNot Nothing Then
       If oRowView.Row.Table.Columns.Contains(sColumnName) Then
          If Not oRowView.IsNull(sColumnName) Then
             Return oRowView(sColumnName).ToString.Trim
          End If
       End If
   End If
End Function  
Select Case e.CommandName
    Case "Email"
        Dim strEmailAddress As String = GetRowStringValue(drCurrentRow, "contact_email")
        Dim strUserName As String = GetRowStringValue(drCurrentRow, "login")
        Dim strUserID As String = GetRowStringValue(drCurrentRow, "username")
        Dim strPassword As String = GetRowStringValue(drCurrentRow, "password")

相关内容

  • 没有找到相关文章

最新更新