DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

DataGridViewの列にリンクを表示する

注意:DataGridViewコントロールは、.NET Framework 2.0で新しく追加されました。

DataGridViewの列にLinkLabelコントロールのようなリンクを表示するには、DataGridViewLinkColumnを使用します。DataGridViewLinkColumnクラスの使い方は、こちらで紹介したDataGridViewButtonColumnとほぼ同じです。

DataGridViewLinkColumn

以下の例では、DataGridViewにリンクの列を追加しています。

VB.NET
コードを隠すコードを選択
'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)
C#
コードを隠すコードを選択
//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として自動で訪問済みにならない時のために、手動でリンクを訪問済みにしています。

VB.NET
コードを隠すコードを選択
'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
C#
コードを隠すコードを選択
//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;

    }
}

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • イベントハンドラの意味が分からない、C#のコードをそのまま書いても動かないという方は、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。