- 題名: DataGridViewでのリンク文字について
- 日時: 2011/11/20 6:47:31
- ID: 29377
- この記事の返信元:
- (なし)
- この記事への返信:
- [29378] Re[1]: DataGridViewでのリンク文字について2011/11/20 13:12:29
- ツリーを表示
こんにちは。
ハイパーリンクとして使用できますよ。
ただしクリックすれば勝手に発動するわけではなく、イベントが発生するのでイベントハンドラ内で自分で処理を行います。
あくまで、ハイパーリンク風に色がついたり下線がついたり、です。
Dobonさんのサンプルの場合はURLを表示するのではなく全列に「詳細閲覧」と表示されValueもその通りになるため
他の列の値を使う等各種切り替えて色々使う用途ですが、
列のUseColumnTextForLinkValueをFalseにしておいて
連携するDataTableの列をStringにでもしておけばValueに任意のURL用文字列をセットできますから、
そのままそれを使用することができます。
サイトのタイトルを表示しておいて別の列のデータをURLとして使用するのでもよいですし。
まぁそこは好きにすればよいのかなと思います。
ユーザ任意でデータを入力するわけではなく何らかのデータから引っ張ってきてURLをセットするのであれば
とりあえずは安全なので、
以下のように「Process.Start」と簡単に書いてもまぁ大丈夫です。
これで列の値をURLとして既定のブラウザで開くようになります。
Private Sub DataGridView1_CellContentClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) _
Handles DataGridView1.CellContentClick
If TypeOf DataGridView1.Columns(e.ColumnIndex) Is DataGridViewLinkColumn AndAlso Not e.RowIndex = -1 Then
Select Case DataGridView1.Columns(e.ColumnIndex).Name
Case "Link" '…リンク列はこれしかつけてないですが。
Dim value As Object = DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Value
If value.GetType Is GetType(DBNull) Then Return
Process.Start(DirectCast(value, String))
Case Else
End Select
End If
End Sub
が、
実際にはURL以外の何でも入りうるわけで、
発動させるデータ列の中身を任意に設定できる場合はこんな処理だと何でもできて危ないので注意してください。
例えば「notepad」と書いてあればメモ帳が起動しますし、
「c:\a.txt」とかすると、a.txtが関連付けされているプログラム(メモ帳等)が起動しますし、
「c:\aaaa.bmp」とかすると、bmpが関連付けされているプログラム(ペイント等)が起動します。
ようは、システムの方で反応するので何でもありになってしまいます。
既定のブラウザのパスを得てそれをProcess.Startする(引数にvalueを使用する)ようにした方がよいでしょう。
こんにちは。 行が増えるごとにカラムまでAddで増やしてはいけません。当然ですが横に列が増えます。 列の定義については、方法はデザイナからの定義でも直コードでの定義でもよいですが、一度だけでよいです。フォームのLoadとかどこかで。 なお、デザイナから型指定のあるデータセットを指定せずに任意のDataTable等と後からコードで連結するのであれば、 デザイナの「列の編集」等から、各列の.DataPropertyNameに連携先のDataTable等の列名を記述しておいてください。 そうしない列はDataTableとの連携相手が指定されていないままになるので取り残され、DataTableの列と同じ列が余分にできてしまいます。 ※型指定のないものを相手にデザイナから列の定義を行う場合、「列の追加」を使うと出てくる設定項目が少なくDataPropertyNameも出てきませんから 二度手間になるので、はなから「列の編集」か「Columns」の方を押してください。 (…現在ある二つの列は、どこで定義したのですか?そこでもうひとつ分も定義してください。)
分類:[.NET]
DataGridViewの列にリンク文字を入れることは可能でしょうか?
DataGridViewLinkColumnで出来るのかなと思ったのですが、これはハイパーリンクなのか詳しく分かりませんでした。
DataGridViewの中の文字列をクリックすると対応のホームページが開くようにしたいのです。
以下を参考にしています。
「DataGridViewの列にリンクを表示する」
http://dobon.net/vb/dotnet/datagridview/datagridviewlinkcolumn.html