Object Reference未设置为实例 - 尝试从ListItem获取DataRowView

时间:2011-12-09 19:18:36

标签: .net vb.net listitem datarowview

我试图从ListItem中的一行获取绑定值。我在每一行上都有一个按钮,当点击它时会执行一项任务(向该名字和电子邮件地址的人发送一封电子邮件消息在该列表项中。所以,我有一个与listview关联的事件处理程序,我正在尝试到达基础数据视图以提取数据项。

以下是我在事件处理程序中的内容:

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 个答案:

答案 0 :(得分:0)

您需要检查一些事项:

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

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

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

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

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")