khalid4775 Ответов: 2

Заполнение combobox datagridview


Я хочу заполнить combobox в datagrid именем элементов, а не идентификатором

у меня есть этот код :





его работа прекрасна, но он дозирует нагрузку в combobox его создание новых 3 столбцов

Что я уже пробовал:

<pre lang="vb"><pre> Public Sub getItemUnits(DGV As DataGridView, ItemID As Integer)
        Dim adp As New SqlClient.SqlDataAdapter("Select FirstUnit, SecondUnit, ThirdUnit from ItemsMainTbl where ItemID = '" & ItemID & "'", ConfigurationManager.ConnectionStrings("connSQLServer").ConnectionString)
        Dim ds As New DataSet
        adp.Fill(ds)
        Dim dt = ds.Tables(0)
        If dt.Rows.Count > 0 Then
            Dim dgvcc As DataGridViewComboBoxCell
            dgvcc = DGV.Rows(DGV.Rows.Count - 1).Cells(2)
            dgvcc.Items.Add(dt.Rows(0).Item("FirstUnit"))
            dgvcc.Items.Add(dt.Rows(0).Item("SecondUnit"))
            dgvcc.Items.Add(dt.Rows(0).Item("ThirdUnit"))
            DGV.ClearSelection()
            DGV.Rows(DGV.Rows.Count - 1).Cells(2).Selected = True
        End If


    End Sub
  FrmManage_Store.ItemLoadGv.Rows.Add()
        FrmManage_Store.ItemLoadGv.Rows(FrmManage_Store.ItemLoadGv.Rows.Count - 1).Cells(0).Value = ItemsGv.CurrentRow.Cells(0).Value
        FrmManage_Store.ItemLoadGv.Rows(FrmManage_Store.ItemLoadGv.Rows.Count - 1).Cells(1).Value = ItemsGv.CurrentRow.Cells(1).Value
        ItemID = ItemsGv.CurrentRow.Cells(0).Value
FrmManage_Store.ItemLoadGv.Rows(FrmManage_Store.ItemLoadGv.CurrentRow.Index).Cells(2).DataGridView.DataSource = p4.Get_Units_By_ItemID(ItemID)

2 Ответов

Рейтинг:
2

Patrice T

Никогда не создавайте SQL-запрос путем конкатенации с пользовательскими вводами, он называется "SQL-инъекция", он опасен для вашей базы данных и подвержен ошибкам.
Одна кавычка в имени - и ваша программа рухнет. Если пользовательский ввод типа "Брайан О'Коннер" может привести к сбою вашего приложения, то это уязвимость SQL-инъекции.
SQL-инъекция-Википедия[^]
SQL-инъекция[^]


Рейтинг:
1

khalid4775

я исправил вот так :


<pre>      Public Function Get_Units_By_ItemID(DGV As DataGridView, ByVal ItemID As Integer) As DataTable
            Dim dt As New DataTable
            p.Get_Units_By_ItemID(dt, ItemID)
            If dt.Rows.Count > 0 Then
                Dim dgvcc As DataGridViewComboBoxCell
                dgvcc = DGV.Rows(DGV.Rows.Count - 1).Cells(2)
                dgvcc.Items.Add(dt.Rows(0).Item("UnitName"))
                dgvcc.Items.Add(dt.Rows(0).Item("UnitName1"))
                dgvcc.Items.Add(dt.Rows(0).Item("UnitName2"))
                DGV.ClearSelection()
                DGV.Rows(DGV.Rows.Count - 1).Cells(2).Selected = True
            End If
            Return dt
        End Function