DataGridView
có loại cột cho điều này, DataGridViewLinkColumn
.
Bạn cần DataBind cột này gõ bằng tay, nơi DataPropertyName
đặt cột để ràng buộc vào trong nguồn dữ liệu của lưới:
DataGridViewLinkColumn col = new DataGridViewLinkColumn();
col.DataPropertyName = "Contact";
col.Name = "Contact";
dataGridView1.Columns.Add(col);
Bạn cũng sẽ muốn ẩn cột văn bản autogenerated rằng xuất phát từ Liên hệ tài sản của Cái lưới sắt.
Ngoài ra, giống như với số DataGridViewButtonColumn
, bạn cần tự xử lý tương tác của người dùng bằng cách trả lời sự kiện CellContentClick
.
Để thay đổi giá trị ô không phải siêu liên kết thành văn bản thuần túy, bạn cần phải thay thế loại ô liên kết bằng ô văn bản. Trong ví dụ dưới đây tôi đã làm điều này trong DataBindingComplete
sự kiện:
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();
}
}
}
Bạn cũng có thể làm điều này từ một hướng khác, thay đổi DataGridViewTextBoxCell
đến một DataGridViewLinkCell
Tôi đề nghị thứ hai này vì bạn sẽ cần phải áp dụng bất kỳ thay đổi nào áp dụng cho tất cả các liên kết đến mọi ô.
Điều này có lợi thế mặc dù bạn sẽ không cần phải ẩn cột được tạo tự động, vì vậy có thể phù hợp với bạn nhất.
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;
}
}
}
Nguồn
2012-06-05 11:55:29
Tôi đã chỉnh sửa câu trả lời của tôi, giải thích làm thế nào để sử dụng tùy chọn đầu tiên của tôi trong trường hợp của bạn tốt hơn (bằng cách ẩn một cột và sử dụng DataPropertyName) cũng như cung cấp một biến thể thứ hai trên câu trả lời nơi bạn giữ cho cột văn bản. –