0

我有一个 GridView,它显示用户信息以及两个带有图像按钮的模板字段。一种是打开详细信息视图来编辑用户信息。另一种是编辑用户的密码。

在我的背后代码中,我有 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



我不知道发生了什么变化,因为此代码在某一时刻确实有效。但是,当我测试页面时,无论如何,两个图像按钮似乎都出现了。在调试时,我还看到它似乎以相同的方式“评估”每一行。例如,对于通过我的 IIf 语句的每一行,它总是返回相同的值,即使它不是真的。

我有一种预感,它正在获取第一行的值并以某种方式重用它,或者评估同一行;这就是为什么它总是返回相同的值并总是显示图像按钮,即使根据我的 IIf 语句它们不应该是可见的。

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

4

1 回答 1

0

好吧,在深入研究之后,我发现了导致问题的原因。

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

所以,我发布的代码确实有效,幸运的是证明我并没有发疯。逻辑是对的!

感谢那些花时间浏览这个问题的人!

于 2013-08-01T17:00:01.963 回答