我试图从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元素的行中失败。
我做错了什么?
由于
答案 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")