填充datagridview组合框 [英] Filling datagridview combobox

查看:76
本文介绍了填充datagridview组合框的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在datagrid中填充combobox,项目名称不是id



i有这个代码:











工作正常,但它在组合框中加载其创建新的3列



我尝试过:



< ; pre lang =vb>< pre> Public Sub getItemUnits(DGV As DataGridView,ItemID As Integer)
Dim adp As New SqlClient.SqlDataAdapter(从ItemMainTbl中选择FirstUnit,SecondUnit,ThirdUnit,其中ItemID ='& ItemID&',ConfigurationManager.ConnectionStrings (connSQLServer)。ConnectionString)
Dim ds As New DataSet
adp.Fill(ds)
Dim dt = ds.Tables(0)
if dt.Rows.Count > 0然后
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 )。单元格( 0 )。Value = ItemsGv.CurrentRow.Cells( 0 )。值
FrmManage_Store.ItemLoadGv.Rows(FrmManage_Store.ItemLoadGv.Rows.Count - 1 )。细胞( 1 )。Value = ItemsGv.CurrentRow.Cells( 1 )。Va lue
ItemID = ItemsGv.CurrentRow.Cells( 0 )。值
FrmManage_Store.ItemLoadGv.Rows(FrmManage_Store.ItemLoadGv.CurrentRow.Index)。单元格( 2 )。DataGridView.DataSource = p4.Get_Units_By_ItemID(ItemID)

解决方案

永远不要通过连接用户输入来构建SQL查询,它被命名为SQL注入,它对您的数据库很危险并且容易出错。

名称中的单引号和程序崩溃。如果像Brian O'Conner这样的用户输入可能会使您的应用程序崩溃,那么这是一个SQL注入漏洞。

SQL注入 - 维基百科 [ ^ ]

SQL注入 [ ^ ]


我已修复如下:





< pre> 公共 功能 Get_Units_By_ItemID(DGV  As  DataGridView,  ByVal  ItemID 作为 整数 As  DataTable 
Dim dt As DataTable
p.Get_Units_By_ItemID(dt,ItemID)
如果 dt.Rows.Count > 0 然后
Dim dgvcc As DataGridViewComboBoxCell
dgvcc = DGV.Rows(DGV.Rows.Count - 1 )。 ( 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
结束 如果
返回 dt
结束 功能< /跨度>


I want to fill combobox in datagrid with name of items not the id

i have this code :





its working fine but it dosent load in combobox its create new 3 columns

What I have tried:

<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)

解决方案

Never build an SQL query by concatenating with user inputs, it is named "SQL injection", it is dangerous for your database and error prone.
A single quote in a name and your program crash. If a user input like "Brian O'Conner" can crash your app, it is an SQL injection vulnerability.
SQL injection - Wikipedia[^]
SQL Injection[^]


i have fixed like so :


<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


这篇关于填充datagridview组合框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆