0

我正在尝试从 ListItem 中的一行获取绑定值。我在每一行都有一个按钮,单击该按钮将执行一项任务(向该列表项行中的姓名和电子邮件地址的人发送电子邮件消息。所以,我有一个与列表视图相关的事件处理程序,我正在尝试进入底层数据行视图以提取数据项。

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

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 元素的那一行失败了。

我做错了什么?

谢谢

4

1 回答 1

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")
于 2011-12-09T20:30:04.587 回答