Как выделить строку DataGridView, находящуюся под мышью в C#

Недавно кто-то спросил меня, как изменить стиль строки под мышью в элементе управления DataGridView. Этот пример делает это. Когда программа запускается, следующий код подготавливает DataGridView для использования.

// Стиль, который используется, когда мышь находится над строкой.
private DataGridViewCellStyle HighlightStyle;

private void Form1_Load(object sender, EventArgs e)
{
    // Определим стиль выделения.
    HighlightStyle = new DataGridViewCellStyle();
    HighlightStyle.ForeColor = Color.Red;
    HighlightStyle.BackColor = Color.Yellow;
    HighlightStyle.Font = new Font(dgvValues.Font, FontStyle.Bold);

    // Создаем некоторые элементы данных.
    dgvValues.Rows.Add(new object[]
        { "Interview Puzzles Dissected", 15.95m, 1 });
    dgvValues.Rows.Add(new object[]
        { "C# 24-Hour Trainer", 45.00m, 2 });
    dgvValues.Rows.Add(new object[]
        { "Beginning Software Engineering", 45.00m, 5 });
    dgvValues.Rows.Add(new object[]
        { "Essential Algorithms", 60.00m, 3 });
    dgvValues.Rows.Add(new object[]
        { "C# 5.0 Programmer's Reference", 49.99m, 1 });
    dgvValues.Rows.Add(new object[]
        { "Beginning Database Design Solutions", 44.99m, 2 });

    // Вычисление итогов.
    CalculateTotals();
}

// Рассчитаем общие затраты.
private void CalculateTotals()
{
    // Рассчитаем общие затраты.
    foreach (DataGridViewRow row in dgvValues.Rows)
    {
        // Вычислить общую стоимость.
        decimal total_cost =
            (decimal)row.Cells["PriceEach"].Value *
            (int)row.Cells["Quantity"].Value;

        // Отображение значения.
        row.Cells["Total"].Value = total_cost;
    }
}

Переменная HighlightStyle будет содержать стиль, используемый для выделения строки под мышью. Обработчик события Load формы определяет стиль. Затем он добавляет некоторые элементы в элемент управления DataGridView и вызывает метод CalculateTotals.

Метод CalculateTotals проходит через строки управления DataGridView и отображает общее количество раз в каждой строке.

Программа использует следующий метод SetRowStyle, чтобы установить стиль строки для определенного DataGridViewCellStyle.

// Устанавливаем стили ячеек в данной строке.
private void SetRowStyle(DataGridViewRow row,
    DataGridViewCellStyle style)
{
    foreach (DataGridViewCell cell in row.Cells)
    {
        cell.Style = style;
    }
}

Этот код проходит через ячейки строки и устанавливает их свойства Style.

Реальное развлечение происходит в событиях мыши мыши DataGridView. Следующий код выполняется, когда мышь входит в одну из элементов управления DataGridView.

// Текущая выделенная ячейка.
private int HighlightedRowIndex = -1;

// Выделите строку этой ячейки.
private void dgvValues_CellMouseEnter(object sender,
    DataGridViewCellEventArgs e)
{
    if (e.RowIndex == HighlightedRowIndex) return;

    // Отметьте ранее выделенную строку.
    if (HighlightedRowIndex >= 0)
    {
        SetRowStyle(dgvValues.Rows[HighlightedRowIndex], null);
    }

    // Выделите строку, удерживающую мышь.
    HighlightedRowIndex = e.RowIndex;
    if (HighlightedRowIndex >= 0)
    {
        SetRowStyle(dgvValues.Rows[HighlightedRowIndex],
            HighlightStyle);
    }
}

Программа сохраняет индекс текущей выделенной строки в переменной HighlightedRowIndex. Когда мышь входит в ячейку, обработчик события сравнивает строку ячейки с HighlightedRowIndex. Если ячейка находится в текущей выделенной строке, правильная строка уже выделена, поэтому обработчик событий ничего не делает.

Программа сохраняет индекс текущей выделенной строки в переменной HighlightedRowIndex. Когда мышь входит в ячейку, обработчик события сравнивает строку ячейки с HighlightedRowIndex. Если ячейка находится в текущей выделенной строке, правильная строка уже выделена, поэтому обработчик событий ничего не делает.

...

Последняя часть кода выполняется, когда мышь покидает ячейку.

// Отметьте выделенную выделенную строку.
private void dgvValues_CellMouseLeave(object sender,
    DataGridViewCellEventArgs e)
{
    if (HighlightedRowIndex >= 0)
    {
        SetRowStyle(dgvValues.Rows[HighlightedRowIndex], null);
        HighlightedRowIndex = -1;
    }
}

Источник: http://csharphelper.com/blog/2017/03/highlight-the-datagridview-row-that-is-under-the-mouse-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector