В приведенном ниже примере событий базы данных ASP.NET 4.5 Gridview, который отлично работает как есть, мне кажется, что строка кода «If Not usr Is Nothing Then» должна фактически находиться вне поля «For EAch DataControlField» потому что мне нужно только один раз проверить это. Однако, когда я обертываю всю логику тем, что «If Not usr is Nothing Then» (см. Вторую итерацию кода), я получаю сообщение об ошибке. Любые мыслиРефакторинг не работает должным образом
Protected Sub gvEBEvals_DataBound(sender As Object, e As EventArgs) Handles gvEBEvals.DataBound
Dim revColumn As Integer = -1
Dim currentColumn As Integer = -1
Dim usr As MembershipUser = Membership.GetUser(HttpContext.Current.User.Identity.Name)
For Each col As DataControlField In gvEBEvals.Columns
If Not usr Is Nothing Then
If (Roles.IsUserInRole(usr.UserName, "administrator") Or Roles.IsUserInRole(usr.UserName, "developer")) Then
If col.HeaderText.ToLower().Trim() = "revenue potential" Then
revColumn = gvEBEvals.Columns.IndexOf(col)
For Each row As GridViewRow In sender.rows
If revColumn > -1 Then
row.Cells(revColumn).Text = String.Format("{0:c0}", Convert.ToDouble(row.Cells(revColumn).Text))
End If
Next
End If
End If
End If
If col.HeaderText.ToLower().Trim() = "is current" Then
currentColumn = gvEBEvals.Columns.IndexOf(col)
For Each row As GridViewRow In sender.Rows
If currentColumn <> -1 Then
If row.Cells(currentColumn).Text = "True" Then row.Font.Bold = True
End If
Next
End If
Next
End Sub
Пересмотренный код, используя один вызов, чтобы проверить наличие пользователя пользователя, какие ошибки
If Not usr Is Nothing Then
For Each col As DataControlField In gvEBEvals.Columns
If (Roles.IsUserInRole(usr.UserName, "administrator") Or Roles.IsUserInRole(usr.UserName, "developer")) Then
If col.HeaderText.ToLower().Trim() = "revenue potential" Then
revColumn = gvEBEvals.Columns.IndexOf(col)
For Each row As GridViewRow In sender.rows
If revColumn > -1 Then
row.Cells(revColumn).Text = String.Format("{0:c0}", Convert.ToDouble(row.Cells(revColumn).Text))
End If
Next
End If
End If
End If
If col.HeaderText.ToLower().Trim() = "is current" Then
currentColumn = gvEBEvals.Columns.IndexOf(col)
For Each row As GridViewRow In sender.Rows
If currentColumn <> -1 Then
If row.Cells(currentColumn).Text = "True" Then row.Font.Bold = True
End If
Next
End If
Next
Else
For Each col As DataControlField In gvEBEvals.Columns
If col.HeaderText.ToLower().Trim() = "is current" Then
currentColumn = gvEBEvals.Columns.IndexOf(col)
For Each row As GridViewRow In sender.Rows
If currentColumn <> -1 Then
If row.Cells(currentColumn).Text = "True" Then row.Font.Bold = True
End If
Next
End If
Next
End If