我有以下数据一个DataGridView。
ContactType | Contact
------------------------------------
Phone | 894356458
Email | xyz@abc.com
在这里,我需要显示的数据“xyz@abc.com”作为超链接,用工具提示“点击发送电子邮件”。 数字数据“894356458”不应该有一个超链接。
有任何想法吗???
TIA!
该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();
}
}
}
您也可以从另一个方向做到这一点,改变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;
}
}
}