如何隐藏 ListView 的列标题?

17

我正在努力找到正确的控件来使用一个预定义作业列表。目前,我在“预定义作业名称”组中使用了一个ListBoxControl,其中列出了船舶服务店所有预定义作业的名称(例如更换机油、调整等)。然后,根据所选项(即作业名称)来显示与之对应的项目。例如,如果选择更换机油,则需要显示4夸脱的机油、1个机油滤清器、人工费等。

当前,在加载表单数据时,我有一个DAO,它使用LINQ to SQL从数据库检索所有作业。然后我遍历结果并将作业名称放入ListBox中。我遇到的问题是,与ListView项不同,ListBox项没有标签。因此,每次用户在ListBox中选择另一个项时,我都必须执行另一个LINQ查询以再次从数据库中获取该作业,以便我可以显示其对应的项目。如果我可以使用ListView并隐藏列标题,我就可以将整个作业设置为标记,这样每次用户选择新项目时,我都可以访问详细信息,而无需再次调用数据库。有没有一种方法可以隐藏ListView的列标题而不隐藏整个列?

Windows Form


如果要显示表格数据,我会使用网格。我相信在GridView中可以隐藏HeaderRow。 - Davide Piras
你的“视图”模式已设置为“详细信息”。为什么不将其设置为“列表”呢? - InBetween
5个回答

62

您可以将ListViewHeaderStyle成员设置为None

listView1.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;


9

请查看 ListView HeaderStyle 属性。它有以下选项:

  1. 不可点击
  2. 可点击

来自 MSDN:

HeaderStyle 属性允许您指定列标题是否可见,如果它们可见,则它们是否将作为可单击按钮运行。如果 HeaderStyle 属性设置为 ColumnHeaderStyle.None,则不显示列标题,尽管 ListView 控件的项目和子项目仍按列排列。


1

你也可以创建一个简单的对象,比如ListItem,它有两个属性:Text(字符串)和Tag(对象)。然后实现ListItem.ToString()方法,你也可以在ListBox中使用它们。

你还可以查看Better ListView Express组件,它是免费的,并允许在没有列的详细信息视图中显示项目。与ListBox和ListView相比,优势在于本地外观和许多额外功能。


1
我发现如果你确定不需要显示表头,最好将HeaderStyle属性设置为None,就像Rajesh在上面提到的那样。
当在.CS中设置屏幕初始加载时,直到屏幕完全呈现之前,表头才会显示。

1
简单的方法是使用 ColumnWidthChanging 事件。
private void listViewExtended1_ColumnWidthChanging(object sender, ColumnWidthChangingEventArgs e)
{
      if (e.ColumnIndex == 0)
      {
           e.Cancel = true;
           e.NewWidth = listViewExtended1.Columns[e.ColumnIndex].Width;
      }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接