Может ли datagridview прочитать гиперссылку? - PullRequest
0 голосов
/ 03 февраля 2020

Гиперссылка листа Excel, которую я имею, будет направлять в папку пользователя p c. То, что я хочу сделать, это импортировать из Excel гиперссылку в DataGridView и оттуда иметь возможность открыть файл, на который ссылается гиперссылка. Тем не менее, я продолжаю наблюдать, как люди устанавливают веб-сайт с гиперссылками внутри своего c# кода, который я не пытаюсь найти, поскольку его сложно кодировать. Есть ли способ достичь этого?

1 Ответ

2 голосов
/ 03 февраля 2020

Это не что-то автоматическое c, и вам нужно кодировать это вручную. Вам нужно использовать DataGridViewLinkColumn и обработать его CellContentClick, а затем передать значение ячейки в виде URL-адреса методу System.Diagnostics.Process.Start.

Если в вашем приложении много мест, которые у вас есть По такому требованию вы можете создать функцию для повторного использования логики c или создать пользовательский DataGridViewLinkColumn, чтобы иметь такое поведение внутри.

Пример

private void Form1_Load(object sender, EventArgs e)
{
    //Get data
    var data = new[] {
        new { Title="Stackoverflow", Location = @"https://www.Stackoverflow.com"},
        new { Title="Windows Folder", Location = @"C:\Windows"},
        new { Title="Windows Folder", Location = @"C:\Windows\system.ini"},
        new { Title="Network Share", Location = @"\\127.0.0.1"},
    };

    // Add columns
    dataGridView1.Columns.Add(new DataGridViewTextBoxColumn()
    {
        Name = "TitleColumn", DataPropertyName = "Title", HeaderText = "Title"
    });
    dataGridView1.Columns.Add(new DataGridViewLinkColumn()
    {
        Name = "LocationColumn", DataPropertyName = "Location", HeaderText = "Location"
    });

    //Handle click on link
    dataGridView1.CellContentClick += (obj, args) =>
    {
        if (args.RowIndex < 0 || args.ColumnIndex < 0)
            return;
        if (dataGridView1.Columns[args.ColumnIndex].Name != "LocationColumn")
            return;
        var value = $"{dataGridView1[args.ColumnIndex, args.RowIndex].Value}";
        if (Uri.TryCreate(value, UriKind.Absolute, out Uri uri))
            System.Diagnostics.Process.Start(value);
    };

    //Show data
    dataGridView1.DataSource = data.ToList();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...