【问题标题】:Can datagridview read a hyperlink?datagridview 可以读取超链接吗?
【发布时间】:2020-05-18 22:10:33
【问题描述】:

我拥有的 excel 表的超链接将指向用户电脑中的文件夹。我想要做的是从 excel 导入超链接到 DataGridView 并从那里打开超链接指向的文件。但是,我不断看到人们在他们的 c# 代码中设置超链接网站,这不是我想要找到的,因为它是硬编码的。有没有办法实现?

【问题讨论】:

  • 我不这么认为。您必须编写 CellClicked 和 CellPainting 事件。或者您可以托管一个 LinkLabel。另外:您的目标是什么:Winforms、WPF、ASP..?您应该始终正确标记您的问题,以便人们可以在问题页面上看到它!
  • 使用DataGridViewLinkColumn,处理CellContentClick,然后将url传递给System.Diagnostics.Process.Start(url)
  • 这能回答你的问题吗? How to open in default browser in C#
  • @oleksa 还有其他几点,比如将 url 显示为超链接,处理单元格超链接部分的点击事件,从单元格获取值。因此,IMO,链接的帖子在一定程度上有所帮助,但没有回答问题。

标签: c# .net winforms datagridview hyperlink


【解决方案1】:

这不是自动的,您需要手动编码。您需要使用DataGridViewLinkColumn,并处理其CellContentClick,然后将单元格的值作为url 传递给System.Diagnostics.Process.Start 方法。

如果您的应用程序中有很多位置有这样的要求,您可以创建一个函数来重用逻辑或创建自定义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();
}

【讨论】:

  • URL 是一个字符串,使它成为 URL 的原因是您使用它的方式。我不安静地明白。链接的示例数据是什么?如果它是一个 URL,那么上面的代码应该可以正常工作。
  • 所以它会像J:\0123 (Tim J)\ Higher Maths (4Feb2020).pdf 对吗?然后使用它作为 URL 没有问题,我更新了代码,你可以看到`@"C:\Windows\system.ini"` 可以正常工作,对于任何其他文件都是一样的。
  • 您只需要将数据加载到网格中。对于包含 URL 的列,添加 DataGridViewLinkColumn 并使用我在上面共享的代码来处理点击链接。我坚持解决方案的原因是因为我猜你遗漏了一些可能会给你带来额外实施工作的东西。
  • DataSet 的列与DataGridView 的列不同
  • 这里我们说的是DataGridView的Columns,答案展示了如何设置DataGridView的列并使用dataGridView1.Columns.Add(new DataGridViewLinkColumn() ....添加一个新的链接列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-18
  • 2011-08-11
  • 1970-01-01
  • 2011-05-30
  • 2011-09-09
  • 2014-03-02
  • 2011-10-21
相关资源
最近更新 更多