Как создать группы строк по идентификатору и разделить группы в сетке данных? - PullRequest
0 голосов
/ 21 января 2019


В настоящее время я получаю список объектов, и этот список попадает прямо в мой DataGridView. Я хотел бы сгруппировать свои строки по идентификатору, разделяя другие группы большой границей. Например:
1
простая граница
1
Большая граница
2
простая граница
2
простая граница
2
Однако мне не удается изменить только верхнюю / нижнюю границу строки. Я не очень опытный, поэтому я хотел бы остаться с «официальными» источниками, избегая плагинов и т. Д.

В настоящее время я использую Visual Studio 2012, язык C #. Я только что посмотрел на свойства строки / ячейки, и ни один из них не может удовлетворить мой запрос.

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 голосов
/ 21 января 2019

Попробуйте следующий код, возможно, вам придется изменить его в соответствии с вашими требованиями

    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;
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...