我试图从列表项中的一行获得绑定值。我在每行上都有一个按钮,当单击该按钮时,将执行一个任务(向该列表项行中姓名和电子邮件地址的人发送电子邮件)。所以,我有一个事件处理程序绑定到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")