VB.Net 在 datagridview 中显示手动设置标题的数据

VB.Net Display data in datagridview with headers set manually

提问人:Bambang Setiawan 提问时间:11/2/2023 最后编辑:Joel CoehoornBambang Setiawan 更新时间:11/3/2023 访问量:52

问:

我有将在 datagridview 中显示的事务数据,但我在 datagridview 中手动创建的标头遇到困难 这是我创建并保存到数据库中的事务enter image description here

在搜索中,我回想起这笔交易要显示

Private Sub fillform()

    Dim table As New DataTable

    dtproductdetail.DataSource = Nothing

    Try
        cmddetail = New SqlCommand("SELECT AP_T_PR_D.ProdCode, IV_M_Product.ProdName, AP_T_PR_D.QTY, IV_M_PackingType.PackingName
                        FROM IV_M_PackingType RIGHT OUTER JOIN
                        IV_M_Product ON IV_M_PackingType.PackingCode = IV_M_Product.PackingCodeDown RIGHT OUTER JOIN
                        AP_T_PR_D ON IV_M_Product.ProdCode = AP_T_PR_D.ProdCode
                        WHERE AP_T_PR_D.PRNumber = '" & selectedrow.Cells(0).Value.ToString() & "' ", conn)

        Adp = New SqlDataAdapter(cmddetail)
        Adp.Fill(table)
        dtproductdetail.AutoGenerateColumns = True
        dtproductdetail.DataSource = table
        dtproductdetail.Refresh()

    Catch ex As Exception

        MessageBox.Show(ex.Message, "fillform", MessageBoxButtons.OK, MessageBoxIcon.Error)

    End Try
End Sub

结果

enter image description here

vb.net WinForms DataGridView

评论

3赞 Joel Coehoorn 11/2/2023
不!不要使用字符串连接将选定的单元格值放入查询中!

答:

-1赞 jmcilhinney 11/2/2023 #1

如果您在设计器中创建了列,我认为这就是您的意思,那么为什么要设置为?如果要手动创建列,则不希望自动创建列。AutoGenerateColumnsTrue

设置为并确保为每个网格列正确设置。它应该设置为您希望它绑定到的那个。AutoGenerateColumnsFalseDataPropertyNameColumnNameDataColumn

实际上,如果您这样做并且网格和表格列的数量相同,那么设置什么就无关紧要了。您的问题具体在于您没有为至少其中一些网格列设置正确或根本没有设置。AutoGenerateColumnsDataPropertyName

评论

0赞 Bambang Setiawan 11/3/2023
抱歉,我忘了将 AutoGenerateColumns 更改为 false,但我通过添加“dtproductdetail.Columns.Add(New DataGridViewTextBoxColumn() 替换为 {.HeaderText = “产品代码”, .DataPropertyName = “ProductCode”})“ 根据 propertyname 列,但只填充了第 3 列,我的笔记是第 0、1、2 和 4 列只读 true
0赞 jmcilhinney 11/3/2023
@BambangSetiawan,为什么要添加代码?为什么不在设计器中添加这些列?
0赞 Vector 11/3/2023 #2

当窗体加载 DataGridView dgvTX 并设置其样式时,将调用此代码

    Private Sub StyleDGV()

    'Set Design of the DataGridView
    dgvTX.DefaultCellStyle.Font = New Font("Times New Roman", 13.0F, FontStyle.Bold)
    dgvTX.ColumnCount = 8
    dgvTX.Columns(0).Width = 50   'ID
    dgvTX.Columns(1).Width = 140  'Date
    dgvTX.Columns(2).Width = 136  'TxType
    dgvTX.Columns(3).Width = 120  'Amt
    dgvTX.Columns(4).Width = 114  'ckNum
    dgvTX.Columns(5).Width = 390  'Desc
    dgvTX.Columns(6).Width = 130  'Bal
    dgvTX.Columns(7).Width = 10  'dumbS
    'To Set Col Header Size Mode = Enabled
    'To Set Col Header Default Cell Styles DO in Properties
    dgvTX.Columns(6).DefaultCellStyle.Format = "c"


    dgvTX.ColumnHeadersHeight = 10 'Sans Serif 'Tahoma
    dgvTX.ColumnHeadersDefaultCellStyle.Font = New Font("Sans Serif", 12.0F, FontStyle.Bold)

    dgvTX.ColumnHeadersDefaultCellStyle.ForeColor = Color.Blue
    dgvTX.DefaultCellStyle.BackColor = Color.LightGoldenrodYellow
    dgvTX.Columns(2).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
    dgvTX.Columns(3).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
    dgvTX.Columns(4).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
    dgvTX.Columns(6).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight


    'dgvTX.Enabled = False 'Prevents Selection of data and scrolling
    'DGV Header Names
    dgvTX.Columns(0).Name = "TID"
    dgvTX.Columns(1).Name = "  Date"
    dgvTX.Columns(2).Name = "  Tx Type"
    dgvTX.Columns(3).Name = "  Amount"
    dgvTX.Columns(4).Name = "  CK Num"
    dgvTX.Columns(5).Name = "Desctiption"
    dgvTX.Columns(6).Name = "  Balance"
    dgvTX.Columns(7).Name = "     "


    dgvTX.Columns(0).SortMode = DataGridViewColumnSortMode.NotSortable
    dgvTX.Columns(1).SortMode = DataGridViewColumnSortMode.NotSortable
    dgvTX.Columns(2).SortMode = DataGridViewColumnSortMode.NotSortable
    dgvTX.Columns(3).SortMode = DataGridViewColumnSortMode.NotSortable
    dgvTX.Columns(4).SortMode = DataGridViewColumnSortMode.NotSortable
    dgvTX.Columns(5).SortMode = DataGridViewColumnSortMode.NotSortable
    dgvTX.Columns(6).SortMode = DataGridViewColumnSortMode.NotSortable

End Sub

评论

0赞 jmcilhinney 11/3/2023
但是,当所有这些属性都可以在设计器中设置时,为什么要编写这些代码呢?
0赞 Vector 11/3/2023
@jmcilhinney 因为我可以更好地控制属性中的设计和设置,所以这是劳动密集型的,而且我可以通过更改一些变量在其他项目中回收此代码 尝试一下,你会喜欢的
0赞 jmcilhinney 11/3/2023
“我可以更好地控制设计”。不,你没有。你在那里所做的一切都做不到;在设计器中完成。它们是相同的属性,因此您具有相同的控制级别。“在物业中设置是劳动密集型的”。点击几个框真的比输入代码更费力吗?“我可以在其他项目中回收这些代码”。在设计器中执行的操作会生成代码,因此可以将该代码复制到另一个项目,就像复制手动编写的代码一样容易。“你会喜欢的”。我向你保证,我不会。
0赞 Bambang Setiawan 11/4/2023
我已经成功尝试使用列添加 datapropertyname 并使用代码设置 datagrid,但是当我尝试编辑以添加新的产品行时会出现问题。“当控件是数据绑定的时,无法以编程方式将行添加到 DataGridView 的行集合中。”