有DataGridView
一个列类型,即DataGridViewLinkColumn
.
您需要手动绑定此列类型,其中DataPropertyName
设置要绑定到网格数据源中的列:
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;
}
}
}