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;
}
}
}
Я отредактировал мой ответ, объясняя, как использовать мой первый вариант в вашем случае лучше (скрывая одну колонку и используя DataPropertyName), а также предлагает второй вариант на ответ, где вы храните текст колонки. –