簡體   English   中英

是否可以在特定列的 DataGridView 中隱藏 header 單元格?

[英]Is it possible to hide the header cell in a DataGridView for specific columns?

我有一個從DataTable填充的DataGridView 然后我用額外的DataGridViewImageColumn來補充它,它最終將 function 作為用於操作任何給定行上的數據的按鈕。

我想知道的是,是否可以隱藏這些圖像列的 header 單元格,但仍為“數據”列保留它們(圖像列是網格中最右邊的列)或者本機( .Visible單個圖像列的屬性似乎是只讀的?)或在繪制單元格時使用某種時髦的解決方法?

按鈕相對較小,但添加列標題(例如“編輯”、“刪除”等)會不必要地加寬列,並且圖像(意味着)對於每個實現的目標是不言自明的。 我還想在視覺上區分數據列和“動作”列。 是的,這純粹是我的審美決定!

這是我目前用來生成DataGridView的代碼:

Dim myBindingSource As New BindingSource
myBindingSource.DataSource = myDataTable
myBindingSource.Filter = myFilter
With myDataGridView
    .DataSource = myBindingSource 
    .AutoResizeColumns()
    .AutoResizeRows()
    .RowHeadersVisible = False
    .AllowUserToAddRows = False
    .Enabled = True
    
    btnEdit = New DataGridViewImageColumn With {.Image = icoEdit, .Width = 30}
    btnEdit.DefaultCellStyle.Padding = New Padding(1, 1, 1, 1)
    .Columns.Insert(.Columns.Count, btnEdit)
    
    btnDelete = New DataGridViewImageColumn With {.Image = icoDelete, .Width = 30}
    btnDelete.DefaultCellStyle.Padding = New Padding(1, 1, 1, 1)
    .Columns.Insert(.Columns.Count, btnDelete)
    
    btnCopy = New DataGridViewImageColumn With {.Image = icoCopy, .Width = 30}
    btnCopy.DefaultCellStyle.Padding = New Padding(1, 1, 1, 1)
    .Columns.Insert(.Columns.Count, btnCopy)
    
    btnRestore = New DataGridViewImageColumn With {.Image = icoRestore, .Width = 30}
    btnRestore.DefaultCellStyle.Padding = New Padding(1, 1, 1, 1)
    .Columns.Insert(.Columns.Count, btnRestore)
End With

我更喜歡將這些列的 header 單元格作為“死區”,類似於網格外的周圍區域......

可能的。

private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
    var tarCols = new[] { 1, 2 };

    if (e.RowIndex == -1 && tarCols.Contains(e.ColumnIndex))
    {
        e.Graphics.FillRectangle(SystemBrushes.AppWorkspace, e.CellBounds);
        e.Handled = true;
    }
}

如果您有不同的.BackgroundColor

private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
    var tarCols = new[] { 1, 2 };

    if (e.RowIndex == -1 && tarCols.Contains(e.ColumnIndex))
    {
        using (var br = new SolidBrush(dataGridView1.BackgroundColor))
            e.Graphics.FillRectangle(br, e.CellBounds);

        e.Handled = true;
    }
}

SO73635319

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM