vb.net如何显示具有可变列宽的数据列表?
我遇到的情况是,我试图用windows窗体中ADODB记录集的数据填充listview(或其他控件)。问题是大多数行都有几列,但有些行只有一列。我正在尝试创建一个POS解决方案,其中一些行可以是注释。 示例输出(为简洁起见简化):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] 我希望注释行跨越控件的整个宽度。 我
第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事件似乎是正确的方向,但我无法让它工作。似乎对这种功能的需求已经足够多了,有一些控件本机就包含了这种功能,但我找不到。