Установите флажки в DataGridView на основе значений базы данных vb.net

ПОЖАЛУЙСТА, ПОСМОТРИТЕ, ЧТО ЯВЛЯЕТСЯ УДАЛЕННО РЕДАКТИРОВАННЫМ КОДОМ, ЧТОБЫ БЫТЬ БОЛЬШЕ УКАЗАННЫМ, ГДЕ НУЖНА ПОМОЩЬ.

Я пытаюсь сделать следующее: у меня есть DataGridView который использует DataAdapter заполнить DataTable, Я жестко запрограммировал отдельный DataGridViewCheckBoxColumn прийти первым. DataGridView столбцы следующие (по порядку):

[0]"ADD" (hard-coded `DataGridViewCheckBoxColumn`)
[1]"Job No" (from sql database)
[2]"Project No" (from sql database)
[3]"Project Name" (from sql database)

у меня тоже есть ComboBox заполняется именами пользователей из отдельной базы данных (но обе имеют общий ключ - userId, связывая их с тем, какой пользователь имеет права администратора для редактирования этого конкретного проекта в другой форме). Цель этой формы - добавить проект этому пользователю, чтобы у него были права администратора для редактирования дополнительных проектов.

Мне нужно для DataGridView заполнить все проекты, и иметь DataGridViewCheckBoxColumn Заполните ".checked = true" для проектов, в соответствии с которыми userId уже связан с имеющимися правами администратора (согласно существующей информации в базе данных). Затем мне нужно иметь возможность добавлять новые проекты, но проверять новые флажки, а затем нажать btnUpdateи соответственно обновлять базу данных.

Я был в состоянии заполнить DataGridViewсоздать DataGridViewCheckBoxColumn, сделать этот столбец НЕ доступным только для чтения, но я не могу установить флажки, связанные с проектами, и так далее... ниже приведен код... пожалуйста, помогите?

Imports System.Data.SqlClient

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        'there is where usernames will be filled into dropdown from Proj_users database
        Dim fillUName As New SqlCommand("SELECT UName FROM Proj_User WHERE Active = 1 and Admin = 1", frmConnect.DB)
        Dim dr As SqlDataReader = fillUName.ExecuteReader()

        While dr.Read()
            If dr.HasRows = True Then
                cmbAddUName.Items.Add(dr("UName"))
            End If
        End While
        dr.Close()

    End Sub

    Private Sub cmbAddUName_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbAddUName.SelectedIndexChanged

        Call fillAddGrid(cmbAddUName.Text)

    End Sub

    Sub fillAddGrid(ByVal PT_User As String)


        'column created for checkbox (to be able to check additional projects that will then be added to the user indicated in the combobox's privileges - let's them be able to change that project's details in another form)
        Dim chk As New DataGridViewCheckBoxColumn()
        grdAddProjectPrivs.Columns.Add(chk)
        chk.FalseValue = False
        chk.TrueValue = True
        chk.HeaderText = "Add"
        chk.Name = "Add"
        chk.ReadOnly = False

        'use stored procedure with parameter to generate recordset
        Dim sqlCmd As New SqlCommand
        sqlCmd.Connection = frmConnect.DB
        sqlCmd.CommandType = CommandType.StoredProcedure
        sqlCmd.CommandText = "SP_ManagePrivs"

        'IF @SP_Use = 3     -- for ADDING privileges, FILL GRID with ALL projects so can add which ones they need
        'BEGIN()
        '   SELECT
        '       P.JobNo AS [Job No],
        '       P.ProjNo AS [Project No],
        '       P.ProjName AS [Project Name]                
        '   FROM Projects P JOIN User_Projects UP ON P.JobNo = UP.JobNo
        '   WHERE P.Deleted = 0 and P.Active = 1
        '   ORDER BY UP.UserID, P.JobNo
        'End

        'for adding privs, need to show all projects
        sqlCmd.Parameters.Add(New SqlParameter("@SP_Use", 3))
        sqlCmd.Parameters.Add(New SqlParameter("@UName", DBNull.Value))
        sqlCmd.Parameters.Add(New SqlParameter("@Active", DBNull.Value))
        sqlCmd.Parameters.Add(New SqlParameter("@Admin", DBNull.Value))

        sqlCmd.ExecuteNonQuery()

        'use DataAdapter to fill datatable
        Dim sqlDA As New SqlDataAdapter()
        sqlDA.SelectCommand = sqlCmd
        Dim table As New DataTable
        sqlDA.Fill(table)
        grdAddProjectPrivs.DataSource = table
        sqlDA.Dispose()

        'reading to get userid to checkboxes accordingly
        Dim userID As New SqlCommand("SELECT JobNo FROM User_Projects WHERE PT_User = '" & cmbAddUName.Text & "'", frmConnect.DB)
    Dim dr As SqlDataReader = userID.ExecuteReader()


    '****THIS IS WHERE I THINK I NEED HELP!!!!
    While dr.Read()
        If dr.HasRows = True Then
            If grdAddProjectPrivs.Columns.Contains(dr("JobNo")) Then
                For Each row As DataGridViewRow In grdAddProjectPrivs.Rows
                    row.Cells("Add").Value = True
                Next
            End If
        End If
    End While
    dr.Close()

    End Sub


    Private Sub btnUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUpdate.Click

        'HERE I AM LOOKING TO UPDATE THE DATABASE BY ADDING THE USER'S UserID number TO THAT SPECIFIC PROJECT THAT THEY CHECK OFF WITH THE CHECKBOX.
        'i'm thinking once i get the gist of manipulating the checkboxes down pat i can figure this out but if there is anything additional i need to know please advise?

    End Sub

End Class

Разбивка макетов таблиц SQL: USER_PROJECTS TABLE CONSISTS OF (UserID, UserName, JobNo); ТАБЛИЦЫ ПРОЕКТОВ СОСТОИТ ИЗ (UserID, JobNo, ProjNo, ProjName)

0 ответов

Другие вопросы по тегам