Как объединить ячейку DataGridView в Winforms

У меня есть некоторые данные в сетке, которые в настоящее время отображаются следующим образом:

------------------ |Hd1| Value | ------------------ |A | A1 | ------------------ |A | A2 | ------------------ |A | A3 | ------------------ |A | A4 | ------------------ |B | B1 | ------------------ |B | B2 | ------------------ |B | B3 | ------------------ |B | B4 | ------------------ |B | B5 | ------------------ |C | C1 | ------------------ |C | C2 | ------------------ 

Я хочу сделать так:

 |Hd | Value | ------------------ |A | A1 | ---------- | | A2 | ---------- | | A3 | ---------- | | A4 | ------------------ |B | B1 | ---------- | | B2 | ---------- | | B3 | ---------- | | B4 | ---------- | | B5 | ------------------ |C | C1 | ---------- | | C2 | ------------------ 

Есть ли способ, которым я могу объединить эти ячейки? Я пробовал во многом и Google, но не нашел подходящего способа. Если возможно показать эти данные другим способом, не используя datagridview, но результат будет таким, как я показал, что также решит мою проблему.

3 Solutions collect form web for “Как объединить ячейку DataGridView в Winforms”

Вы должны сначала найти повторяющиеся значения

Необходимо два метода:

 bool IsTheSameCellValue(int column, int row) { DataGridViewCell cell1 = dataGridView1[column, row]; DataGridViewCell cell2 = dataGridView1[column, row - 1]; if (cell1.Value == null || cell2.Value == null) { return false; } return cell1.Value.ToString() == cell2.Value.ToString(); } 

в случае, cellpainting:

 private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) { e.AdvancedBorderStyle.Bottom = DataGridViewAdvancedCellBorderStyle.None; if (e.RowIndex < 1 || e.ColumnIndex < 0) return; if (IsTheSameCellValue(e.ColumnIndex, e.RowIndex)) { e.AdvancedBorderStyle.Top = DataGridViewAdvancedCellBorderStyle.None; } else { e.AdvancedBorderStyle.Top = dataGridView1.AdvancedCellBorderStyle.Top; } } 

теперь в форматировании ячеек:

 if (e.RowIndex == 0) return; if (IsTheSameCellValue(e.ColumnIndex, e.RowIndex)) { e.Value = ""; e.FormattingApplied = true; } 

и в form_load:

 dataGridView1.AutoGenerateColumns = false; 

Изображение DGV_Merge

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

Кроме того, вам нужно будет переопределить DataGridView.CellClick, CellEnter, CellFormatting и другие методы, чтобы дать вашему DataGridView полнофункциональную функциональность. Например, при нажатии на ячейку вся объединенная ячейка (или группа ячеек, которые составляют объединенную ячейку) должна быть оформлена по индивидуальному заказу.

Здесь вы можете найти пример кода:

http://social.msdn.microsoft.com/forums/en-US/vbinterop/thread/5b659cbd-7d29-4da4-8b38-5d427c3762e2

http://forums.codeguru.com/showthread.php?415930-DataGridView-Merging-Cells

http://www.codeproject.com/Questions/152113/How-can-i-merge-DataGridView-Rows-Cells-with-Equal

Есть несколько хороших ответов на asp.net, но в winforms и для этого примера (слияние одинаковых данных в столбцах) он не определен.

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

Таким образом, если конец «A» был «A4», а также начало «B» было «A4», это не было бы слиянием. который часто является более желательным. (Если вы этого не хотите, лучше используйте другие ответы)

MergeGridviewCells (DGV, new int [] {0,1}); // Например, если вы хотите объединить данные первых столбцов, затем 3-й столбец, а затем второй столбец, вы можете использовать новый int [] {0,2,1}

 private void MergeGridviewCells(DataGridView DGV, int[] idx) { DataGridViewRow Prev = null; foreach (DataGridViewRow item in DGV.Rows) { if (Prev != null) { string firstCellText = string.Empty; string secondCellText = string.Empty; foreach (int i in idx) { DataGridViewCell firstCell = Prev.Cells[i]; DataGridViewCell secondCell = item.Cells[i]; firstCellText = (firstCell != null && firstCell.Value != null ? firstCell.Value.ToString() : string.Empty); secondCellText = (secondCell != null && secondCell.Value != null ? secondCell.Value.ToString() : string.Empty); if (firstCellText == secondCellText) { secondCell.Style.ForeColor = Color.Transparent; } else { Prev = item; break; } } } else { Prev = item; } } } 

Предварительный просмотр:

введите описание изображения здесь

  • Открытие «известного типа файла» в исполняемом экземпляре настраиваемого приложения - .NET
  • Как сделать приложение WinForms полностью включенным?
  • Как написать код WinForms, который автоматически масштабируется до системных настроек шрифта и dpi?
  • Настройка OpenFileDialog
  • центр MessageBox в родительской форме
  • Как рисовать округленный прямоугольник с помощью WinForms (.NET)?
  • Неверная операция поперечного streamа
  • Form_Load () 'event' или Override OnLoad ()
  • Введите символ «&» в текстовую метку в Windows Forms?
  • как связать datatable с datagridview в c #
  • Ширина столбца CView ListView Auto
  • Interesting Posts

    Матрица корреляции сюжетов в граф

    Как я могу восстановить полные привилегии пользователя root root?

    Является ли Delphi «с» ключевым словом плохая практика?

    Как остановить Wpf Tabcontrol, чтобы выгрузить визуальное дерево при изменении табуляции

    ClearCase: могу ли я захватить файл в динамическом режиме?

    Языковые книги / Учебники для популярных языков

    Программное обеспечение для очистки экрана, которое будет перемещаться по страницам

    проверка на стороне клиента в атрибуте пользовательской проверки – asp.net mvc 4

    Возможно ли объединить два интернет-соединения для повышения производительности?

    Развертывание моего приложения в корневом каталоге Tomcat

    Есть что-то вроде «Firebug для IE» (для отладки JavaScript)?

    Почему модульное деление (%) работает только с целыми числами?

    Facebook игнорирует изображение OG на первой учетной записи

    В чем разница между vmalloc и kmalloc?

    Смонтируйте и демонтируйте жесткий диск через скрипт / программное обеспечение

    Давайте будем гением компьютера.