Правильное выполнение команды для контроля доступа в системе

vb.net winforms controls

24 просмотра

1 ответ

Я надеюсь, что мой заголовок соответствует моему вопросу. Добрый вечер

У меня есть форма с 2-мя данными, первая из которых содержит данные из моей системы инвентаризации, а вторая содержит мое имя элемента управления.

Второе Datagridview содержит данные, которые выглядят следующим образом.

введите описание изображения здесь

и у меня есть элементы управления с именем командная кнопка в моей форме, и это выглядит так

введите описание изображения здесь

так что если я расскажу о каждом из них, это будет выглядеть так.

введите описание изображения здесь

Столбец ControlNameсодержит название всех моих командных кнопок, а столбец Accessбудет действовать, Button Name.Enabled = True/Falseнапример, как выделенный синим цветом, ControlName = Reviewи Access = Trueэто означает, чтоReview.Enabled = True

Теперь у меня есть 1-й обзор данных, и это выглядит так.

введите описание изображения здесь

Теперь каждый раз, когда я нажимаю на строку в первом представлении данных, включенные выше кнопки также будут включены в зависимости от критериев в столбце 6 (5 в столбце представления данных), для дальнейшего объяснения здесь приведен код для этого.

Private Sub DataGridView1_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick
    Dim i As Integer
    i = DataGridView1.CurrentRow.Index
    If DataGridView1.Item(5, i).Value = "Reviewed" Then
        Review.Enabled = True
        View.Enabled = True
        CanceledPR.Enabled = True
    ElseIf DataGridView1.Item(5, i).Value = "Unposted" Then
        Review.Enabled = True
        View.Enabled = True
        CanceledPR.Enabled = True
    ElseIf DataGridView1.Item(5, i).Value = "Partially Selected" Then
        Review.Enabled = False
        View.Enabled = True
        CanceledPR.Enabled = False
    ElseIf DataGridView1.Item(5, i).Value = "Fully Selected" Then
        Review.Enabled = False
        View.Enabled = True
        CanceledPR.Enabled = False
    ElseIf DataGridView1.Item(5, i).Value = "Cancelled PR" Then
        Review.Enabled = False
        View.Enabled = True
        CanceledPR.Enabled = False
    End If
End Sub

и вот код для включения кнопки команды на основе 2-го представления данных

            Dim Enable As Boolean
            For Each row As DataGridViewRow In DataGridView2.Rows
                Enable = Convert.ToBoolean(row.Cells("Access").Value)
                Me.Controls(row.Cells("ControlName").Value.ToString()).Enabled = Enable
Next

Теперь вот мой вопрос, как я могу их объединить? Я имею в виду выполнить процедуру при щелчке строк в первом представлении данных и при этом следовать привилегии в элементах управления во втором представлении данных.

в последний раз я изменяю значение Accessстолбца во 2-ом DGV на trueи выполняю правильное выполнение кода в 1-м DGV, и была включена кнопка «Все». я пытаюсь поместить оба кода в Datagridview1_Click.

Я пробовал на этот код

Private Function EnableByPermission(ByVal buttonName As String) As Boolean
        Dim Enable As Boolean = False

        ' Look over the Enumerable collection of Rows the one where the
        ' cell for ControlName contains the button name required
        Dim row = DataGridView2.Rows _
                  .Cast(Of DataGridViewRow)() _
                  .FirstOrDefault(Function(x) _
                      x.Cells("ControlName").Value.ToString = buttonName)


        ' If we found it then return the boolean value for the Access column      
        If row IsNot Nothing Then
            Enable = Convert.ToBoolean(row.Cells("Access").Value)
        End If
        Return Enable
    End Function
    Private Sub DataGridView1_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick
        Dim i As Integer
        i = DataGridView1.CurrentRow.Index


        If DataGridView1.Item(5, i).Value =  "Reviewed" Then
            Review.Enabled = True And EnableByPermission("Review")
            View.Enabled = True And EnableByPermission("View")
            CanceledPR.Enabled = True And EnableByPermission("CanceledPR")
        ElseIf DataGridView1.Item(5, i).Value = "Unposted" Then
            Review.Enabled = True And EnableByPermission("Review")
            View.Enabled = True And EnableByPermission("View")
            CanceledPR.Enabled = True And EnableByPermission("CanceledPR")
        End If
    End Sub

и нажмите на строку «Неопубликовано», и кнопка Reviewбыла включена, но когда я нажимаю на строку «Проверено», кнопка Reviewвсе еще включает возможность отмены выбора.

Я надеюсь, что кто-то поможет мне TY

Автор: Nyx Assasin Источник Размещён: 08.11.2019 11:08

Ответы (1)


0 плюса

Решение

Вы можете преобразовать код, который просматривает столбец «Доступ», в функцию, которая возвращает логическое значение в соответствии с вашими настройками «разрешений».

Private Function  EnableByPermission(buttonName as string) as Boolean
    Dim Enable As Boolean = False

    ' Look over the Enumerable collection of Rows the one where the
    ' cell for ControlName contains the button name required
    Dim row = DataGridView2.Rows _
              .Cast(Of DataGridViewRow)() _
              .FirstOrDefault(Function(x) _ 
                  x.Cells("ControlName") = buttonName) 


    ' If we found it then return the boolean value for the Access column      
    If row IsNot Nothing Then
        Enable = Convert.ToBoolean(row.Cells("Access").Value)
    End If
    Return Enable
End Function

...

Private Sub DataGridView1_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick
    Dim i As Integer
    i = DataGridView1.CurrentRow.Index
    Dim status as String = DataGridView1.Item(5, i).Value.ToString()

    ' Logical AND between the predefined value for the Status column and
    ' the return value of the Function EnableByPermission. 
    ' In this way the buttons are enabled only if both columns agree on the 
    ' enabled status of the button
    If status = "Reviewed" Then
        Review.Enabled = True And EnableByPermission("Review")
        View.Enabled = True And EnableByPermission("View")
        CanceledPR.Enabled = True And EnableByPermission("CanceledPR")
    Else If status = "Unposted" Then
        .... and so on....
Автор: Steve Размещён: 20.08.2016 10:09
Вопросы из категории :
32x32