.NET DataGridView: удалить «текущий ряд» черного треугольника - PullRequest
15 голосов
/ 29 апреля 2011

В DataGridView, даже если вы установите сетку как доступную только для чтения, в заголовках строк есть черный треугольник, который отображается в текущей строке.

Я бы хотел, чтобы его также не отображали, такжеЯ хотел бы избежать большого заполнения этих ячеек, вызванного треугольником.Я предполагаю, что заполнение вызвано треугольником, потому что заполнение ячейки равно 0.

Возможно ли это сделать?Как?

Спасибо!

Редактировать

Вот как создается текст заголовков строк:

for (int i = 0; i < 5; i++)
{
    DataGridViewRow row = new DataGridViewRow();
    row.HeaderCell.Value = headers[i];
    dataGridView1.Rows.Add(row);
}

и headers это просто массив строк.(string[])

Ответы [ 8 ]

18 голосов
/ 29 апреля 2011
  • Если вы хотите сохранить заголовки строк, а не скрыть их, вы можете использовать заполнение ячеек, чтобы убрать треугольник с поля зрения:

    this.dataGridView1.RowHeadersDefaultCellStyle.Padding = 
        new Padding(this.dataGridView1.RowHeadersWidth);
    
  • Если вы используете текст заголовка строки и хотите, чтобы он был видимым, вам нужно использовать какую-то пользовательскую раскраску - к счастью, очень просто. После приведенного выше кода просто присоедините событие RowPostPaint, как показано ниже:

    dataGridView1.RowPostPaint += 
        new DataGridViewRowPostPaintEventHandler(dataGridView1_RowPostPaint);
    

    А в методе RowPostPaint:

    void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
    {
        object o = dataGridView1.Rows[e.RowIndex].HeaderCell.Value;
    
        e.Graphics.DrawString(
            o != null ? o.ToString() : "",
            dataGridView1.Font, 
            Brushes.Black, 
            new PointF((float)e.RowBounds.Left + 2, (float)e.RowBounds.Top + 4));
    }
    

    Как указывает Дэн Нили, использование Brushes.Black выше перезапишет любые существующие изменения, поэтому для кисти лучше использовать:

    new SolidBrush(dataGridView1.RowHeadersDefaultCellStyle.ForeColor)
    
5 голосов
/ 29 апреля 2011

Установите RowHeadersVisible в false.

3 голосов
/ 20 апреля 2016

Очень простое решение - установить высоту строки до 16 пикселей или менее. Это отключает все значки в ячейке заголовка строки.

dataGridView1.RowTemplate.Height = 16;
2 голосов
/ 15 сентября 2012

Если кто-то еще хочет знать:

dataGridView1.RowHeadersWidth = 4; // the left row header size.

Это уберет треугольник и сузит размер по умолчанию.

Надеюсь, это поможет.

1 голос
/ 06 мая 2015

DataGridViewRowPostPaintEventArgs включает этот конкретный метод PaintHeader:

PaintHeader(DataGridViewPaintParts) - Paints the specified parts of the row header of the current row.

Это перечисление DataGridViewPaintParts: https://msdn.microsoft.com/en-us/library/ms159092%28v=vs.110%29.aspx

Итак, что вы делаете в событии RowPostPaint вашего datagridview, сначала скажите ему, чтобы он рисовал только фон заголовка строки ... вот так:

e.PaintHeader(DataGridViewPaintParts.Background)

Затем скажите, чтобы он нарисовал любую строку, которую вы хотите. Вот мой пример:

Private Sub MyDGV_RowPostPaint(sender As Object, e As DataGridViewRowPostPaintEventArgs) Handles dgvData.RowPostPaint

    Dim grid As DataGridView = DirectCast(sender, DataGridView)

    e.PaintHeader(DataGridViewPaintParts.Background)

    Dim rowIdx As String = (e.RowIndex + 1).ToString()

    Dim rowFont As New System.Drawing.Font("Segoe UI", 9.0!, _
        System.Drawing.FontStyle.Bold, _
        System.Drawing.GraphicsUnit.Point, CType(0, Byte))

    Dim centerFormat = New StringFormat()
    centerFormat.Alignment = StringAlignment.Far
    centerFormat.LineAlignment = StringAlignment.Near

    Dim headerBounds As Rectangle = New Rectangle(e.RowBounds.Left, e.RowBounds.Top, grid.RowHeadersWidth, e.RowBounds.Height)

    e.Graphics.DrawString(rowIdx, rowFont, SystemBrushes.ControlText, headerBounds, centerFormat)

End Sub
0 голосов
/ 29 ноября 2016
 'Datagridview'.rowheadervisible=false 

Чтобы скрыть выделение строки черной стрелкой ma bob

Datagridview - это имя вашей таблицы данных без кавычек '', так что ... Если ваша сетка называется Пример, тогда

 Example.rowheadervisible=false
0 голосов
/ 15 ноября 2013
dataGridView1.CurrentCell = null;

Удалит черную стрелку полностью.

Вам необходимо запускать эту строку каждый раз, когда обновляются данные в DataGridView.

0 голосов
/ 23 марта 2012

Проблема треугольника, это просто, поместите

dgv_Products.Rows[xval].Selected = true;
dgv_Products.CurrentCell  = dgv_Products.Rows[xval].Cells[0];

, что делает текущее свойство ячейки нулевым для текущей выбранной строки. (Проверено, работает для dgv_Products.MultiSelect = false;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...