- PR -

DataGridのダブルクリックイベント

1
投稿者投稿内容
gaucho
会議室デビュー日: 2004/09/15
投稿数: 8
投稿日時: 2005-12-08 11:58
お世話になります。

VB.NetでのDataGridダブルクリックイベントに関して質問させて下さい。


■したい事
 DataGrid内でダブルクリックされた行を知りたい。
 DataGrid内のダブルクリックイベントはセル内では走っていないようです
 (カラムヘッダやセル間枠(?)では走っているのですが)。

■試してみた事
 MouseDownイベントは走っているので、MouseDownイベント時に現在時間を
 保存して、時間MouseDownイベント発生時との時間差でダブルクリックかどうか
 を判定するようにしてみました。
 が、以下のような動きをして、MouseDownイベントが走りません。
 ・一回目のクリック時、クリックしたセル内の文字列が選択状態になる。
  (この時MouseDownイベントは走ります)
 ・二回目のクリック時、クリックしたセル内の文字列の選択が解け、
  文字と文字の間にキャレットが表示される。
  (この時MouseDownイベントは走りません)
 DataGridに対しReadOnly=TRUEを設定しても動きは同じでした。

■教えていただきたい事
 1.DataGridのセルクリック時にセル内の文字列を選択させない方法
  私の予想ですが、セル内の文字列を選択している為に二回目のクリック時に
  MouseDownイベントが走らないのだと思ってます。
  本来ならば、行全体を選択状態にしたいのですが、
  DataGrid1.Select(DataGrid1.CurrentCell.RowNumber)
  と記述しても、クリックしたセルはセル内の文字列に対しての選択状態の
  ままです(他のセルはセル全体が選択状態になっている)。
  
 2.DataGrid内のダブルクリック判定方法
  実はもっと簡単にダブルクリック時の行を取得する方法があるのかも、
  とも思っています。ご存知の方教えてください。
 

以上、よろしくお願いいたします。

■開発環境
WindowsXP SP2
Visual Studio .Net 2003
Visual Basic ウィンドウアプリケーション

しろぽん
会議室デビュー日: 2005/12/08
投稿数: 10
投稿日時: 2005-12-08 14:57
自分も同じ要望があってやってみた方法があります。

ASP.NETでデフォルトで用意されていないイベントを処理するときには、
@JavaScriptなどのクライアントサイドスクリプトをクライアントのブラウザに送り込んでおく方法と、
Aカスタムコントロールで実装する方法があります。

Aはややこしいので、@の方法を紹介します。

方法
DataGridのItemDataBoundイベントなどで、表の各行にJavaScriptのスクリプトを記述します。
行のIDは表の作成時にASP.NETが各行に振っていくので、それを取得できます。
行の特定の列の値を取得することもできます。

Private Sub DG(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles DG.ItemDataBound
'行
Dim DG_RowItem As DataGridItem = e.Item
Dim DG_No As String = DG_RowItem.Cells(0).Text

DG_RowItem.Attributes("ondblclick") = "javascript:page_open('" & DG_No & "');"

--以下略--

のような感じです。

自分の場合、これで、ダブルクリックでその行の詳細画面を別ウィンドウで表示するなどの機能を実装しました。

他にもいろいろ応用があって、
この会議室のアーカイブにも沢山情報があると思いますよ。
gaucho
会議室デビュー日: 2004/09/15
投稿数: 8
投稿日時: 2005-12-09 13:22
しろぽんさん、どうもありがとうございました。

教えていただいたのはASP.NETでしょうか?
私が現在試しているのは、VB.NETのウィンドウアプリケーションでして、
ASP.NETではありません。
私の書き方がまずかったでしょうか?申し訳ありません。
また、近々ASP.NETで作業を行う事があるので、参考にさせて頂きます。

で、自己レスですが、解決しました。
現在、DataGridのCurrentCellChangedイベントで下記コードを
書いていました。
DataGrid1.Select(DataGrid1.CurrentCell.RowNumber)
これをOnPaintイベントに書くと、普通にDoubleClickイベントが
走りました。
#自分で参考資料でリンクを貼っておきながら従ってませんでした。

どうもお騒がせしました。

しろぽん
会議室デビュー日: 2005/12/08
投稿数: 10
投稿日時: 2005-12-09 14:45
そうでしたか、すみません誤解してました。
イベントで困っていると聞いてすぐにWEBアプリだと思ってしまいました。

Windowsアプリならダブルクリックのイベントも普通にキャッチできますね。
解決出来てよかったですね。
1

スキルアップ/キャリアアップ(JOB@IT)