我有一个GridView,它显示用户信息以及带有图像按钮的两个模板字段。一种是打开详细信息视图来编辑用户信息。另一种是编辑用户的密码。
在我的Code Behind中,我有3个IIf语句来检查某些标准。基于此标准的某些组合,我希望ImageButtons显示/不显示。
这是我的代码背后:
Protected Sub gvUsers_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gvUsers.RowDataBound
Dim isProvisioned As Boolean
Dim acceptedToS As Boolean
Dim isSuspended As Boolean
'hide password change option for users that have not yet been provisioned or have not accepted ToS Agreement or have been suspended'
If e.Row.RowType = DataControlRowType.DataRow And _
DirectCast(sender, GridView).EditIndex <> e.Row.DataItemIndex Then
isProvisioned = IIf(String.IsNullOrEmpty(e.Row.DataItem(GUser.columns.DATEADDED).ToString), False, True)
acceptedToS = IIf(String.IsNullOrEmpty(e.Row.DataItem(GUser.columns.TOSTIMESTAMP).ToString), False, True)
isSuspended = IIf(String.IsNullOrEmpty(e.Row.DataItem(GUser.columns.SUSPENDDATE).ToString), False, True)
Dim btnAdminEdit As ImageButton = DirectCast(e.Row.FindControl("btnAdminEdit"), ImageButton)
Dim btnAdminSelect As ImageButton = DirectCast(e.Row.FindControl("btnAdminSelect"), ImageButton)
btnAdminEdit.Visible = Not (isSuspended) AndAlso isProvisioned AndAlso acceptedToS
btnAdminSelect.Visible = isProvisioned
Else
gvUsers.EmptyDataText = "No records found matching specified criteria."
End If
End Sub
我不知道是什么改变了,因为这个代码DID在某一点上起作用。但是,当我测试页面时,无论如何,两个图像按钮似乎都显示出来。在调试时,我还看到它似乎以同样的方式“评估”每一行。对于经过我的IIf语句的每一行,它总是返回相同的值,即使它不是真的。
我有一种预感,它正在取第一行的值并重新使用它,或者评估同一行;这就是为什么它总是返回相同的值并始终显示图像按钮,即使根据我的IIf语句它们不应该是可见的。
我非常感谢任何帮助,因为我不太清楚如何从这里解决它。
答案 0 :(得分:0)
好吧,经过深入研究后,我发现了造成这个问题的原因。
在看到此问题之前,我做的最后一次更改是添加了另一个要在GridView中显示的列。这扭曲了列的索引,因此我的IIF语句没有检查正确的数据字段,因此评估不正确。
所以,我发布的背后的代码确实有用,幸运的是证明了我不会发疯。逻辑是正确的!
感谢那些花时间看一眼这个问题的人!