Typ DataGridView
ma typ kolumny: DataGridViewLinkColumn
.
Trzeba databind tej kolumnie wpisać ręcznie, gdzie DataPropertyName
ustawia kolumnę do wiązania się w źródle danych w siatce za:
DataGridViewLinkColumn col = new DataGridViewLinkColumn();
col.DataPropertyName = "Contact";
col.Name = "Contact";
dataGridView1.Columns.Add(col);
Będziesz także chcą, aby ukryć kolumnę wygenerowaną automatycznie tekst, który pochodzi od nieruchomości Kontaktowego siatka.
Ponadto, podobnie jak w przypadku DataGridViewButtonColumn
, użytkownik musi samodzielnie obsługiwać interakcję, odpowiadając na zdarzenie CellContentClick
.
Aby następnie zmienić wartości komórek, które nie są hiperlinkami do zwykłego tekstu, należy zastąpić typ komórki łącza komórką pola tekstowego. W przykładzie poniżej Robiłem to w trakcie imprezy 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();
}
}
}
Można to zrobić także z innego kierunku, zmieniając DataGridViewTextBoxCell
Do DataGridViewLinkCell
Proponuję ten drugi ponieważ trzeba będzie zastosować wszelkie zmiany dotyczące wszystkich łączy do każdej komórki.
Ma to tę zaletę, że nie będzie trzeba ukrywać automatycznie generowanej kolumny, więc może być dla Ciebie najlepsza.
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;
}
}
}
Mam edytowane moją odpowiedź, wyjaśniając, w jaki sposób korzystać z pierwszej opcji w twoim przypadku lepiej (ukrywając jedną kolumnę i korzystania DataPropertyName), a także oferując drugą odmianę na odpowiedź gdzie trzymasz kolumny tekstu. –