gpt4 book ai didi

c# - Winforms DataGridView 中的超链接单元格

转载 作者:可可西里 更新时间:2023-11-01 08:05:13 24 4
gpt4 key购买 nike

我有一个包含以下数据的数据 GridView 。

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

在这里,我需要将数据“xyz@abc.com”显示为超链接,并带有工具提示“点击发送电子邮件”。号码数据“894356458”不应该有超链接。

有什么想法吗???

TIA!

最佳答案

DataGridView 有一个列类型,DataGridViewLinkColumn .

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

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

您还需要隐藏来自网格的 Contact 属性的自动生成的文本列。

此外,与 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();
}
}
}

您也可以从另一个方向执行此操作,将 DataGridViewTextBoxCell 更改为 DataGridViewLinkCell 我建议第二次,因为您需要应用适用于所有链接的任何更改到每一个细胞。

虽然您不需要隐藏自动生成的列,但这样做确实有好处,因此可能最适合您。

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;
}
}
}

关于c# - Winforms DataGridView 中的超链接单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10896623/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com