selectedrows seleccionar por net from fila data current column codigo c# winforms datagridview

seleccionar - selectedrows datagridview c#



Cómo combinar la celda DataGridView en Winforms (3)

El control DataGridView no tiene propiedades o métodos relacionados para combinar celdas, pero puede lograr lo mismo con la pintura personalizada. Puede utilizar el evento DataGridView.CellPainting o anular el método Paint.

Además, tendrá que anular los métodos DataGridView.CellClick, CellEnter, CellFormatting y otros para darle a su DataGridView una funcionalidad completa. Por ejemplo, al hacer clic en la celda, toda la celda fusionada (o grupo de celdas que constituyen una celda fusionada) tendrá que ser personalizada.

Puedes encontrar algunos ejemplos de código aquí:

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

Tengo algunos datos en una grilla que actualmente se muestra así:

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

Quiero que se vea así:

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

¿Hay alguna manera de que pueda fusionar estas células? He intentado de muchas maneras también google pero no encontré ninguna manera adecuada. Si es posible mostrar estos datos de otra manera sin utilizar Datagridview, pero el resultado es la forma en que lo he mostrado, eso también resolverá mi problema.


Primero debe encontrar un duplicado de valores

Necesita dos métodos:

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(); }

en el evento, pintura de células:

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; } }

ahora en formato de celda:

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

y en form_load:

dataGridView1.AutoGenerateColumns = false;


Hay algunas buenas respuestas en asp.net pero en winforms y para este ejemplo (fusionar los mismos datos en columnas) no está definido.

Puede usar color.transparent para ocultar los mismos valores en datagridview. incluso con este código, las mismas filas no se eliminan y pueden ser útiles para cálculos matemáticos. incluso usted puede definir qué columnas fusionar según su tipo de deseo.

De esta forma, si el final de "A" era "A4" y el inicio de "B" era "A4", no se fusionarían. que a menudo es más deseado. (Si no quiere esto, mejor use otras respuestas)

MergeGridviewCells (DGV, new int [] {0,1}); // Por ejemplo, si desea fusionar los datos de las primeras columnas / luego la 3ª columna y luego la segunda columna, puede usar los nuevos 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; } } }

enter image description here