我有一种情况,我试图用Windows窗体中的ADODB记录集中的数据填充列表视图(或其他控件)。问题是大多数行会有几列,但有些行只有1列。我正在尝试创建一个POS解决方案,其中一些行可以是注释。
示例输出(简化为简洁):
第1行:[quantity1],[item1],[item1 description],[item1 price]
第2行:[comment1]
第3行:[quantity2],[item2],[item2 description],[item2 price]
第4行:[quantity3],[item3],[item3 description],[item3 price]
第5行:[comment2]
我希望评论行跨越控件的整个宽度。 据我所知,listview不允许这样的可变列宽。在vb.net窗体中是否有一个控件允许这种类型的格式化?或者有没有其他方法来实现这种视觉输出?
答案 0 :(得分:0)
我终于从viblend找到了一个自定义的datagridview控件here,效果很好。 我仍然使用新控件找到绳索,但我可以通过以下代码动态合并行:
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