我目前正在接收对象列表,并且该列表直接进入了DataGridView。
我想按ID对行进行分组,并用大边框将其他组分开。
例如:
1
简单边框
1
大边框
2
简单边框
2
简单边框
2
但是,我无法仅修改一行的上下边框。
我不太有经验,所以我想留在“官方”资源中,避免使用插件等。
我当前正在使用Visual Studio 2012,语言是C#。 我只是查看了/ cell属性,似乎没有一个可以满足我的要求。
foreach (DataGridViewRow row in dgv_LectureEcritures.Rows)
{
if (row.Index != 0)
{
//If ID is different from previous row
if (Convert.ToInt32(row.Cells[0].Value) != Convert.ToInt32(dgv_LectureEcritures.Rows[row.Index-1].Cells[0].Value))
{
//Console.WriteLine(Convert.ToInt32(row.Cells[0].Value) + " " + Convert.ToInt32(dgv_LectureEcritures.Rows[row.Index - 1].Cells[0].Value));
//thicken upper border
}
}
}
我以为我只需要在这里修改一个属性,但是由于没有我想要的属性,我不知道该怎么做。
感谢您可以带来的任何帮助!
答案 0 :(得分:0)
尝试以下代码,您可能需要根据需要进行更改
private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if (e.RowIndex < 0 || e.RowIndex + 1 >= dataGridView1.RowCount)
return;
string currentValue = dataGridView1[0, e.RowIndex] == null ? string.Empty : dataGridView1[0, e.RowIndex].Value.ToString();
string nextValue = dataGridView1[0, e.RowIndex + 1] == null ? string.Empty : dataGridView1[0, e.RowIndex + 1].Value.ToString();
Rectangle newRect = new Rectangle(e.CellBounds.X,
e.CellBounds.Y, e.CellBounds.Width,
e.CellBounds.Height);
using (
Brush gridBrush = new SolidBrush(this.dataGridView1.GridColor),
backColorBrush = new SolidBrush(e.CellStyle.BackColor),
foregroundBrush = new SolidBrush(e.CellStyle.ForeColor),
boldBorderBrush = new SolidBrush(Color.Black)
)
{
using (Pen normalGridLinePen = new Pen(gridBrush),
boldGridLinePen = new Pen(boldBorderBrush, 2))
{
// Erase the cell.
e.Graphics.FillRectangle(backColorBrush, e.CellBounds);
if (!currentValue.Equals(nextValue))
{
//Draw grid line on the bottom
e.Graphics.DrawLine(boldGridLinePen, e.CellBounds.Left,
e.CellBounds.Bottom, e.CellBounds.Right,
e.CellBounds.Bottom);
}
e.Graphics.DrawRectangle(normalGridLinePen, newRect);
// Draw the text content of the cell, ignoring alignment.
if (e.Value != null)
{
e.Graphics.DrawString(e.Value.ToString(), e.CellStyle.Font,
foregroundBrush, e.CellBounds.X + 2,
e.CellBounds.Y + 2, StringFormat.GenericDefault);
}
e.Handled = true;
}
}
}