【问题标题】:Hidden certain column header in C# datagridview在 C# datagridview 中隐藏某些列标题
【发布时间】:2014-07-04 17:01:16
【问题描述】:

例如,如果我想在 Datagridview 中隐藏某些列标题。我将使用此代码:

dataGridView1.ColumnHeadersVisible = false;

但这会使所有列标题不可见。现在,如果我只想隐藏某些列标题怎么办。

例如,我有 3 列标题。我只想让第三列标题不可见,而不隐藏所有属于该列的行数据。这可能吗?

如果我错了,请指正并纠正我。

【问题讨论】:

  • 只是标题还是整列?这将隐藏该列:stackoverflow.com/questions/6960739/…
  • 不是整个列,只是标题。
  • 我现在假设您的意思是清除标题文本?这样的事情可能会起作用:grid.Columns[2].HeaderText = "";
  • @intracept 如果清除标题文本,仍然有分隔线。
  • 如果该列存在,总会有。 “你问不可能的事!” - 卢克天行者 :)

标签: c# datagridview


【解决方案1】:

您需要处理DataGridView.CellPainting Event

在事件处理程序中,您将获得一个DataGridViewCellPaintingEventArgs 的实例。您可以使用此对象的ColumnIndexRowIndex 属性来确定是否正在绘制要隐藏的标题单元格。如果正在绘制的单元格是列标题,RowIndex 将为 -1。

当正在绘制有问题的标题单元格时,除了e.Handled = true; 之外什么都不做可能只是一件简单的事情。

【讨论】:

  • 现在没有时间给你写一个例子,但如果需要,可以在今天晚些时候或明天写。
【解决方案2】:

我发现这篇文章正在寻找类似问题的帮助。我正在使用 RowDataBound 事件处理程序在我的网格中隐藏特定列(第 5 列之后的任何内容):

for (int i = 6; i<e.Row.Cells.Count; i++)
{
    e.Row.Cells[i].Visible = false;
}

...有效,但这些列的所有标题仍然存在。我可以通过将这一行添加到循环中来解决这个问题:

for (int i = 6; i<e.Row.Cells.Count; i++)
{
    e.Row.Cells[i].Visible = false;
    GridView1.HeaderRow.Cells[i].Visible = false;
}

现在列和标题已同步。我对必须在事件处理程序中引用 GridView1 本身并不感到兴奋,所以如果有人知道改进它的方法,请继续。

我删除了第 5 列之后的所有内容,但您可以使用相同的概念来隐藏任何特定的列/标题。希望对您有所帮助。

【讨论】:

    【解决方案3】:

    只需将该列的 HeaderText 设置为空白字符串即可。

    示例:您要隐藏第一列标题:

    myGridView.Columns[0].HeaderText = "";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-20
      • 1970-01-01
      • 2018-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多