Как реализовать ссылку в таблице DataGrid? - CodeHelper

Как реализовать ссылку в таблице DataGrid?

1

1. Как правильно реализовать ссылку в таблице(столбце) DataGrid, если более конкретно, то как правильно реализовать ссылку в header таблицы(на рисунке внизу - Delete All)?

2.Как правильно сделать, чтобы при нажатии на ссылку DELETE удалялась строка в которой этот DELETE записан?

alt text

Вот такой DataGrid и вот такие ссылки. Использую такой код:

        DataGridViewLinkColumn links = new DataGridViewLinkColumn();
        links.HeaderText = ColumnName.DeleteAll.ToString("G");
        links.DataPropertyName = ColumnName.DeleteAll.ToString("X");
        links.ActiveLinkColor = Color.Green;
        links.LinkBehavior = LinkBehavior.SystemDefault;
        links.LinkColor = Color.Blue;
        links.TrackVisitedState = true;
        links.VisitedLinkColor = Color.YellowGreen;

        dataGridView1.Columns.Add(links);

Но, не работает все равно :(

Новые ответы


1

Приведённый код только добавляет колонку в таблицу (кстати, тоже самое можно сделать вообще без кода, на редакторе форм). Никакие действия при этом не настраиваются. Чтобы осуществить некоторое действие при клике на ссылку нужно подписаться на событие CellContentClick объекта DataGridView. Обработчик может быть примерно таким:

private void DataGridView_CellContentClick(
    object sender,
    DataGridViewCellEventArgs e)
{
    // Индекс колонки
    var colIndex = e.ColumnIndex;

    // Индекс строки
    var rowIndex = e.RowIndex;

    // Проверяем, что клик произошел именно на столбце со ссылками
    // 3 — это хардкод индекса колонки
    if (colIndex == 3)
    {
        // Зная номер колонки (rowIndex) производим
        // удаление или любое другое действие с набором данных.
    }
}

Для отслеживания клика на заголовок таблицы должно подойти событие CellClick:

private void DataGridView_CellClick(
    object sender,
    DataGridViewCellEventArgs e)
{
    // Индекс колонки
    var colIndex = e.ColumnIndex;

    // Индекс строки
    var rowIndex = e.RowIndex;

    // Опять проверяем, что клик произошел именно на 
    // столбце со ссылками. Также проверяем, что номер
    // строки равен -1. Это означает, что клик произошел
    // в заголовке, а не в обычной строке.
    if (colIndex == 3 && rowIndex == -1)
    {
        // осуществляем Delete All или любое другое действие.
    }
}

v1.7.123.556
© 2009—2010 CodeHelper FAQ | О сайте | Обратная связь | История изменений | Статьи
Creative Commons LicenseМатериалы сайта распространяются под лицензией Creative Commons Attribution-Share Alike 3.0 Unported.