Imports Infragistics.Win.UltraWinGrid; Imports Infragistics.Win.FormattedLinkLabel;
WinGrid™ のセルは、クリック イベントが処理される必要があるハイパーリンクを持つことができます。たとえば、WinGrid 列はデータ モデルのプライマリ キーを表し、ハイパーリンクとして設定されます。これらのハイパーリンクをエンド ユーザーにクリックさせたい場合や、ブラウザを起動したりクリックしたレコードに関連する特定のページにナビゲートしたい場合があります。
このトピックは、ひとつの列がハイパーリンクの列となるように WinGrid の設定方法を示します。ハイパーリンクの列は、データ モデルのプライマリ キーになります。ハイパーリンクのひとつをクリックすると、デフォルト ブラウザがクエリ文字列内のプライマリ キー値を含む URL で起動されます。URL は基本的に Google® 検索エンジンで実行される検索です。
このトピックは、WinGrid が Northwind データベースの Customers テーブルで移植されていることを前提としています。WinGrid へのデータ バインドについての詳細は、 「WinGrid をフラット データ ソースにバインドする」を参照してください。
CustomerID 列にハイパーリンクを追加します。
WinGrid コントロールをクリックし、プロパティ ウィンドウで、DisplayLayout プロパティを指定および展開します。DisplayLayout で Bands プロパティを指定および展開します。これはフラット グリッドなので、Band はひとつしかありません。そのプロパティを展開して Columns プロパティを指定します。Column プロパティの省略記号 (…) ボタンをクリックして、列コレクション エディタを起動します。
CustomerId 列を指定および選択します。Style プロパティを URL に設定します。[OK] ボタンをクリックしてエディタを閉じます。
コードの記述を開始する前にコード ビハインドに using/Imports のディレクティブを配置します。そうすれば、メンバーは完全に記述された名前を常にタイプする必要がなくなります。
Visual Basic の場合:
Imports Infragistics.Win.UltraWinGrid; Imports Infragistics.Win.FormattedLinkLabel;
C# の場合:
using Infragistics.Win.UltraWinGrid; using Infragistics.Win.FormattedLinkLabel;
WinGrid の Click イベントを処理し、イベント ハンドラで以下のコードを使用します:
Visual Basic の場合:
'これを再使用可能にし、Sender イベント引数からグリッドを取得します
Dim g As UltraGrid = TryCast(sender, UltraGrid)
'以下のテクニックを使用してクリックされた UIElement を取得しようとします
Dim u As UIElement = g.DisplayLayout.UIElement.ElementFromPoint _
(g.PointToClient(Form.MousePosition))
'可能である NULL を必ずテストします。
If u Is Nothing Then
Return
End If
'クリックできるさまざまなタイプを観察します(異なるタイプを確認するために
'出力ウィンドウを表示します
System.Diagnostics.Debug.WriteLine(u.[GetType]().ToString())
'クリックされる LinkLabel についてのみ注意するので、
'以下のタイプを調べます。それがこのエレメントである場合、何かを実行したいです
If TypeOf u Is Infragistics.Win.FormattedLinkLabel.TextSectionUIElement Then
'GetContext メソッドを使用してそれと関連付けられたセルを提供するように UIElement に '求めます"
Dim c As UltraGridCell = TryCast(u.GetContext(GetType(UltraGridCell)), UltraGridCell)
'宣言したセルは NULL の場合があります
If c Is Nothing Then
Return
End If
'これで、クリックした UIElement によって表される本当の元となるセルを持ちます。
'セルの値にアクセスし、このケースで行いたいすべてのことを実行し、
'Google へのブラウザを起動するので、セル値を使用して検索します。
System.Diagnostics.Process.Start(String.Format("http://www.google.com/search?hl=en&q= {0}_&aq=f&oq=", c.Value.ToString()))
End If
C# の場合:
//これを再使用可能にし、Sender イベント引数からグリッドを取得します
UltraGrid g = sender as UltraGrid;
//以下のテクニックを使用してクリックされた UIElement を取得しようとします
UIElement u = g.DisplayLayout.UIElement.ElementFromPoint(g.PointToClient(Form.MousePosition));
//可能である NULL を必ずテストします。
if (null == u) return;
//クリックできるさまざまなタイプを観察します(異なるタイプを確認するために
// 出力ウィンドウを表示します)
System.Diagnostics.Debug.WriteLine(u.GetType().ToString());
//クリックされる LinkLabel について知る必要があるので、
//以下のタイプを調べます。それがこのエレメントの場合、何かを行います。
if (u is Infragistics.Win.FormattedLinkLabel.TextSectionUIElement)
{
//GetContext メソッドを使用してそれと関連付けられたセルを提供するように UIElement に
//求めます"
UltraGridCell c = u.GetContext(typeof(UltraGridCell)) as UltraGridCell;
//宣言したセルは NULL の場合があります
if (null == c) return;
//これで、クリックした UIElement によって表される本当の元となるセルを持ちます。
//セルの値にアクセスし、このケースで行いたいすべてのことを実行し、
//Google へのブラウザを起動するので、セル値を使用して検索します。
System.Diagnostics.Process.Start(string.Format
("http://www.google.com/search?hl=en&q={0}&aq=f&oq=", c.Value.ToString()));
}
アプリケーションを実行します。CustomerID 列のハイパーリンクをクリックすると、対応する customerID の結果を示す Google 検索ページへのデフォルト ブラウザを起動します。