在DataGridView的的WinForms细胞的超链接(Hyperlink cell in Wi

2019-06-25 04:50发布

我有以下数据一个DataGridView。

ContactType        |        Contact
------------------------------------
Phone              |       894356458
Email              |     xyz@abc.com

在这里,我需要显示的数据“xyz@abc.com”作为超链接,用工具提示“点击发送电子邮件”。 数字数据“894356458”不应该有一个超链接。

有任何想法吗???

TIA!

Answer 1:

DataGridView有此列类型, DataGridViewLinkColumn

您需要手动进行数据绑定此列类型,其中DataPropertyName设置绑定到网格的数据源列:

DataGridViewLinkColumn col = new DataGridViewLinkColumn();
col.DataPropertyName = "Contact";
col.Name = "Contact";       
dataGridView1.Columns.Add(col);

您还希望隐藏来自电网的接触特性自动生成的文本列。

此外,与DataGridViewButtonColumn你需要应对自己处理用户交互CellContentClick事件。


然后,为了改变这种不超链接到纯文本单元格的值,你需要替换为文本单元的链接细胞类型。 在下面的例子中,我期间这样做DataBindingComplete事件:

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

您也可以从另一个方向做到这一点,改变DataGridViewTextBoxCellDataGridViewLinkCell我的建议是第二,因为你将需要申请适用于所有链接到每一个细胞的任何变化。

这确实有优势,虽然你不会再需要隐藏自动生成的列,因此可能最适合您。

void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
    foreach (DataGridViewRow r in dataGridView1.Rows)
    {
        if (System.Uri.IsWellFormedUriString(r.Cells["Contact"].Value.ToString(), UriKind.Absolute))
        {
            r.Cells["Contact"] = new DataGridViewLinkCell();
            // Note that if I want a different link colour for example it must go here
            DataGridViewLinkCell c = r.Cells["Contact"] as DataGridViewLinkCell;
            c.LinkColor = Color.Green;
        }
    }
}


文章来源: Hyperlink cell in Winforms DataGridView