datagridview с использованием таблицы данных со ссылкой на столбец href - PullRequest
0 голосов
/ 03 апреля 2012

Я пытаюсь выяснить, как получить ограниченный столбец datagridview в моем проекте c # winform, чтобы он отображался как ссылка href.Дело в том, что щелчок ссылки работает, но любой обычный пользователь не осознает, что он может щелкнуть поле, поскольку оно отображается в виде строки.Мне нужно, чтобы поле отображалось синим цветом с подчеркиванием, указатель мыши превращается в руку ... и т. Д.

Я смог сделать это ранее, когда использовал наборы данных с моей сеткой данных.Я подошел к конструктору и выбрал «Добавить столбец» и добавил его как «DataGridViewLinkColumn». Недавно я изменил проект для использования таблиц данных, и я понял, что поля больше не отображаются как кликабельные (если я нажимаю, это работает, хотя).

Какой идеал, как сделать это с относительной легкостью? Я искал, и я несколько удивлен, что не могу найти простое решение.

Ответы [ 4 ]

2 голосов
/ 22 апреля 2013

Измените тип ячеек, которые являются ссылками, на DataGridViewLinkCell, а затем обработайте щелчок по ячейке, например:

void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
    foreach (DataGridViewRow r in dataGridView1.Rows)
    {
        if (System.Uri.IsWellFormedUriString(r.Cells["Links"].Value.ToString(), UriKind.Absolute))
        {
            r.Cells["Links"] = new DataGridViewLinkCell();
            DataGridViewLinkCell c = r.Cells["Links"] as DataGridViewLinkCell;
        }
    }
}

// And handle the click too
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    if (dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex] is DataGridViewLinkCell)
    {
        System.Diagnostics.Process.Start( dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value as string);
    }
}
1 голос
/ 03 апреля 2012

Это может помочь:

        DataGridViewLinkColumn col1 = new DataGridViewLinkColumn();
        dataGridView1.Columns.Add(col1);
        dataGridView1.Columns[0].Name = "Links";

        DataGridViewRow dgvr = new DataGridViewRow();
        dgvr.CreateCells(dataGridView1);

        DataGridViewCell linkCell = new DataGridViewLinkCell();
        linkCell.Value = @"http:\\www.google.com";
        dgvr.Cells[0] = linkCell;

        dataGridView1.Rows.Add(dgvr);

создает столбец, а затем ячейку типа link.Вы можете использовать циклы foreach, чтобы сделать это более упорядоченно и быстрее для большего количества предметов.

Удачи!

0 голосов
/ 03 апреля 2012

Вы можете просто покрасить этот столбец в сетке данных. Вы можете сделать это в событии DataBindingComplete следующим образом:

private void dataGridView1_DataBindingComplete(object sender,
    DataGridViewBindingCompleteEventArgs e)
{
    if(this.mydatagridview.Columns["YourLinkColumnName"] != null)
    {    
        this.mydatagridview.Columns["YourLinkColumnName"].DefaultCellStyle.Font = ...
        this.mydatagridview.Columns["YourLinkColumnName"].DefaultCellStyle.ForeColor = ...
    }
}

Вы можете установить шрифт так, как вам нравится (например, подчеркнутый, цветной и т. Д.).

Кроме того, вы можете изменить стиль ячейки по умолчанию в конструкторе, если у вас есть предварительно подготовленные столбцы (а не автоматически созданные столбцы).

0 голосов
/ 03 апреля 2012

Посмотрите на свойство DataGridViewLinkColumn.LinkBehavior.Для него можно установить AlwaysUnderline.

Что касается цвета, просто используйте свойства * LinkColor для DataGridViewLinkColumn.

Cheers

...