注意:DataGridViewコントロールは、.NET Framework 2.0で新しく追加されました。
DataGridViewの列にLinkLabelコントロールのようなリンクを表示するには、DataGridViewLinkColumnを使用します。DataGridViewLinkColumnクラスの使い方は、こちらで紹介したDataGridViewButtonColumnとほぼ同じです。
以下の例では、DataGridViewにリンクの列を追加しています。
'DataGridViewLinkColumnの作成 Dim column As New DataGridViewLinkColumn() '列の名前を設定 column.Name = "Link" '全てのリンクに"詳細閲覧"と表示する column.UseColumnTextForLinkValue = True column.Text = "詳細閲覧" 'マウスポインタがリンク上にあるときだけ下線をつける column.LinkBehavior = LinkBehavior.HoverUnderline '自動的に訪問済みとならないようにする 'デフォルトでTrue column.TrackVisitedState = True 'DataGridViewに追加する DataGridView1.Columns.Add(column)
//DataGridViewLinkColumnの作成 DataGridViewLinkColumn column = new DataGridViewLinkColumn(); //列の名前を設定 column.Name = "Link"; //全てのリンクに"詳細閲覧"と表示する column.UseColumnTextForLinkValue = true; column.Text = "詳細閲覧"; //マウスポインタがリンク上にあるときだけ下線をつける column.LinkBehavior = LinkBehavior.HoverUnderline; //自動的に訪問済みになるようにする //デフォルトでTrue column.TrackVisitedState = true; //DataGridViewに追加する DataGridView1.Columns.Add(column);
クリックされたことを知る方法も、DataGridViewButtonColumnと同じで、DataGridView.CellContentClickイベントを使用します。
補足:CellClickイベントは、セル内のリンクでない部分をクリックしても発生してしまいます。
以下に示す例では、何行目のリンクがクリックされたかを表示しています。ここでは、DataGridViewLinkColumn.TrackVisitedStateプロパティをFalseとして自動で訪問済みにならない時のために、手動でリンクを訪問済みにしています。
'CellContentClickイベントハンドラ Private Sub DataGridView1_CellContentClick(ByVal sender As Object, _ ByVal e As DataGridViewCellEventArgs) _ Handles DataGridView1.CellContentClick Dim dgv As DataGridView = CType(sender, DataGridView) '"Link"列ならば、ボタンがクリックされた If dgv.Columns(e.ColumnIndex).Name = "Link" Then MessageBox.Show((e.RowIndex.ToString() + _ "行のリンクがクリックされました。")) '訪問済みにする Dim cell As DataGridViewLinkCell = _ CType(dgv(e.ColumnIndex, e.RowIndex), DataGridViewLinkCell) cell.LinkVisited = True End If End Sub
//CellContentClickイベントハンドラ private void DataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) { DataGridView dgv = (DataGridView)sender; //"Link"列ならば、ボタンがクリックされた if (dgv.Columns[e.ColumnIndex].Name == "Link") { MessageBox.Show(e.RowIndex.ToString() + "行のリンクがクリックされました。"); //訪問済みにする DataGridViewLinkCell cell = (DataGridViewLinkCell)dgv[e.ColumnIndex, e.RowIndex]; cell.LinkVisited = true; } }