Il DataGridView
ha un tipo di colonna per questo, DataGridViewLinkColumn
.
È necessario DataBind digitare manualmente questa colonna, dove DataPropertyName
imposta la colonna di legarsi al DataSource della griglia:
DataGridViewLinkColumn col = new DataGridViewLinkColumn();
col.DataPropertyName = "Contact";
col.Name = "Contact";
dataGridView1.Columns.Add(col);
Si vuole anche per nascondere la colonna di testo generato automaticamente che deriva dalla proprietà di contatto di la griglia.
Inoltre, come con lo DataGridViewButtonColumn
è necessario gestire autonomamente l'interazione dell'utente rispondendo all'evento CellContentClick
.
Per quindi modificare i valori delle celle che non sono collegamenti ipertestuali a testo normale è necessario sostituire il tipo di cellula legame con la cellula casella di testo. Nell'esempio che segue ho fatto questo durante la manifestazione 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();
}
}
}
È inoltre possibile eseguire questa operazione dalla direzione opposta, la modifica del DataGridViewTextBoxCell
ad un DataGridViewLinkCell
suggerisco questo secondo dato che sarà necessario applicare eventuali modifiche applicabili a tutti i collegamenti a ogni cella.
Questo ha il vantaggio però che non sarà quindi necessario nascondere la colonna generata automaticamente, quindi potrebbe adattarsi meglio.
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;
}
}
}
fonte
2012-06-05 11:55:29
Ho modificato la mia risposta, che spiega come utilizzare la mia prima opzione nel caso migliore (nascondendo una colonna e l'utilizzo di DataPropertyName), oltre ad offrire una seconda variante sulla risposta in cui si mantiene la colonna di testo. –