如何通过ID创建行组并在datagridview中将组分开?

时间:2019-01-21 09:00:09

标签: c# datagridview


我目前正在接收对象列表,并且该列表直接进入了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                
          }
     }
}

我以为我只需要在这里修改一个属性,但是由于没有我想要的属性,我不知道该怎么做。
感谢您可以带来的任何帮助!

1 个答案:

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