我有一个包含以下数据的datagridview。
ContactType | Contact
------------------------------------
Phone | 894356458
Email | xyz@abc.com
在这里,我需要将数据“xyz@abc.com”显示为超链接,并提供工具提示“点击发送电子邮件”。数字数据“894356458”不应该有超链接。
任何想法???
TIA!
答案 0 :(得分:21)
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;
}
}
}
答案 1 :(得分:0)
您可以在DataGridView中更改整个列的样式。这也是使列链接成为列的一种方法。
DataGridViewCellStyle cellStyle = new DataGridViewCellStyle();
cellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
cellStyle.ForeColor = Color.LightBlue;
cellStyle.SelectionForeColor = Color.Black;
cellStyle.Font = new Font(FontFamily.GenericSansSerif, 10, FontStyle.Underline);
dataGridView.Columns[1].DefaultCellStyle = cellStyle;