Скрыть указанные границы ячеек в datagridview? - PullRequest
0 голосов
/ 24 сентября 2018

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

Я хочу скрыть одну или две ячейки прямоугольников из моего представления данных.

Я не хочу скрывать столбцы илиданные, которые содержат мои клетки.

Я просто хочу скрыть указанные ячейки.

dataGridView1.CellBorderStyle = DataGridViewCellBorderStyle.None;

1 Ответ

0 голосов
/ 25 сентября 2018

Рекомендуемый способ скрыть или изменить стиль границы ячейки - кодировать событие CellPainting.

Не беспокойтесь, рисование не требуется.Все, что вам нужно сделать, это установить несколько полей в параметре e.AdvancedBorderStyle.

Вот пример:

enter image description here

Обратите внимание на «вертикально слитый» вид ячеек в 3-м столбце;то же самое для «горизонтально слитых» ячеек внизу.Также двойная граница ячейки в 5-м столбце.

private void dataGridView1_CellPainting(object sender,
                                        DataGridViewCellPaintingEventArgs e)
{
    if (e.ColumnIndex == 2 && e.RowIndex == 6)
        e.AdvancedBorderStyle.Right = DataGridViewAdvancedCellBorderStyle.None;

    if (e.ColumnIndex == 2 && e.RowIndex == 1)
        e.AdvancedBorderStyle.Bottom = DataGridViewAdvancedCellBorderStyle.None;

    if (e.ColumnIndex == 4 && e.RowIndex == 4)
    {
        e.AdvancedBorderStyle.All = DataGridViewAdvancedCellBorderStyle.InsetDouble;
        e.AdvancedBorderStyle.Bottom = DataGridViewAdvancedCellBorderStyle.Single;
    }
}

Обратите внимание, что скрывать границы довольно просто: просто скройте правую или нижнюю границу;другие стили границ требуют некоторого метода проб и ошибок (или более глубокого понимания; -)

Здесь я сначала устанавливаю стиль для всех сторон, но так как он окрашивает нижний слой в белый цвет (по крайней мере, это то, что я думаю), я затем устанавливаюграница боттона возвращается к одиночному.

Возможно, вы захотите упростить способ проверки;Это простой пример.

Обновление :

Вот код, который делает объединение более динамичным: используйте функцию mergeCells, чтобы отметить ячейку для объединенияили слияние с правым или нижним соседом:

private void mergeCells(DataGridViewCell cell, bool mergeH, bool mergeV)
{
    string m = "";
    if (mergeH) m += "R";  // merge horizontally by hiding the right border line
    if (mergeV) m += "B"; // merge vertically by hiding the bottom border line
    cell.Tag =  m == "" ? null : m;
}

CellPainting теперь выглядит следующим образом:

private void customDGV1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
    if (e.ColumnIndex < 0 || e.RowIndex < 0) return;
    DataGridViewCell cell = ((DataGridView)sender)[e.ColumnIndex, e.RowIndex];
    if (cell.Tag == null) return;
    string hide = cell.Tag.ToString();

    if (hide.Contains("R")) 
        e.AdvancedBorderStyle.Right = DataGridViewAdvancedCellBorderStyle.None;
    else
        e.AdvancedBorderStyle.Right = DataGridViewAdvancedCellBorderStyle.Single;

    if (hide.Contains("B")) 
        e.AdvancedBorderStyle.Bottom = DataGridViewAdvancedCellBorderStyle.None;
    else 
        e.AdvancedBorderStyle.Bottom = DataGridViewAdvancedCellBorderStyle.Single;

}

Обновление 2:

Если вы хотите применить это к ColumnHeaders, вам нужно сначала отключить dgv.EnableHeadersViualStyles ..

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