IIF语句确定GridView中ImageButton的可见性未正确评估

时间:2013-07-31 18:14:38

标签: asp.net vb.net gridview iif

我有一个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语句它们不应该是可见的。

我非常感谢任何帮助,因为我不太清楚如何从这里解决它。

1 个答案:

答案 0 :(得分:0)

好吧,经过深入研究后,我发现了造成这个问题的原因。

在看到此问题之前,我做的最后一次更改是添加了另一个要在GridView中显示的列。这扭曲了列的索引,因此我的IIF语句没有检查正确的数据字段,因此评估不正确。

所以,我发布的背后的代码确实有用,幸运的是证明了我不会发疯。逻辑是正确的!

感谢那些花时间看一眼这个问题的人!