vb.net如何显示具有可变列宽的数据列表?

vb.net如何显示具有可变列宽的数据列表?,vb.net,listview,datagridview,Vb.net,Listview,Datagridview,我遇到的情况是,我试图用windows窗体中ADODB记录集的数据填充listview(或其他控件)。问题是大多数行都有几列,但有些行只有一列。我正在尝试创建一个POS解决方案,其中一些行可以是注释。 示例输出(为简洁起见简化): 第1行:[数量1],[项目1],[项目1说明],[项目1价格] 第2行:[注释1] 第3行:[数量2],[项目2],[项目2说明],[项目2价格] 第4行:[数量3],[项目3],[项目3说明],[项目3价格] 第5行:[评注2] 我希望注释行跨越控件的整个宽度。 我

我遇到的情况是,我试图用windows窗体中ADODB记录集的数据填充listview(或其他控件)。问题是大多数行都有几列,但有些行只有一列。我正在尝试创建一个POS解决方案,其中一些行可以是注释。 示例输出(为简洁起见简化):

第1行:[数量1],[项目1],[项目1说明],[项目1价格]
第2行:[注释1]
第3行:[数量2],[项目2],[项目2说明],[项目2价格]
第4行:[数量3],[项目3],[项目3说明],[项目3价格]
第5行:[评注2]

我希望注释行跨越控件的整个宽度。
我的理解是listview不允许这样的可变列宽。vb.net windows窗体中是否有允许这种格式设置的控件?或者还有其他方法可以实现这种可视化输出吗?

我终于从viblend中找到了一个定制的datagridview控件,效果非常好。 我仍然在寻找新控件的诀窍,但我能够通过以下代码动态合并行:

    Imports VIBlend.WinForms.DataGridView
    Imports VIBlend.Utilities

    Public Class Form1
        Private Sub Form1_Shown(sender As System.Object, e As System.EventArgs) Handles MyBase.Shown
            With viDataGridView1
                .AutoGenerateColumns = True
                'dt is a pre-defined dataTable variable
                .DataSource = dt
                .ColumnsHierarchy.AutoResize()
                'dataTable has 9 columns, first and last columns should be invisible
                'unless the row is a designated row for comments
                .ColumnsHierarchy.Items(0).Width = 0 'this column contains string comment, empty string for non-comment rows
                .ColumnsHierarchy.Items(8).Width = 0 'this column contains boolean flag [isComment]
                .AllowCellMerge = True
                .Refresh()
            End With
        End Sub

        Private Sub viDataGridView1_Paint(sender As System.Object, e As System.Windows.Forms.PaintEventArgs) _
                                        Handles viDataGridView1.Paint
            Dim colItem As HierarchyItem
            With viDataGridView1
                For Each rowItem In .RowsHierarchy.Items
                    colItem = .ColumnsHierarchy.Items(8) 'column with boolean flag
                    If .CellsArea.GetCellValue(rowItem, colItem).Equals(True) Then
                        'this is a comment line
                        colItem = .ColumnsHierarchy.Items(0)
                        .CellsArea.SetCellSpan(rowItem, colItem, 1, 7)
                    End If
                Next
            End With
        End Sub
    End Class

您是否尝试过从
ADO
对象加载
DataTable
,并将其作为
DataSource
分配给
DataGridView
控件?大部分的工作都是为您完成的,就列而言。也许datagridview控件更适合我,尽管我不知道如何在运行时动态合并单元格或更改单元格宽度。我想显示发票的行,并根据行是否为注释行动态更改每行的单元格宽度。。我在每一行上都有一个布尔开关来显示它是否是注释。如果开关为true,我希望将所有单元格宽度(包含注释的单元格除外)设置为零。这可能吗?只是为了表明我正在积极地用谷歌搜索答案:)我遇到了这样一个问题:一个超载的CellPaint事件似乎是正确的方向,但我无法让它工作。似乎对这种功能的需求已经足够多了,有一些控件本机就包含了这种功能,但我找不到。