C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: DataGridのCurrentRowIndex


(過去ログ 32 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■15716 / inTopicNo.1)  DataGridのCurrentRowIndex
  
□投稿者/ アラリ (1回)-(2008/03/19(Wed) 11:12:15)

分類:[.NET 全般] 

VB.NET2003

フォーム上にDataGridを置き,
DataGrid上で右クリックをおすとコンテキストメニューで選択行を1行消す.ということをしたいです.

*****************************************************************************************************
Private Sub mnuRow_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuRowDelete.Click

Dim lTable As DataTable = vPubDataSet.Tables("TNDF")
Dim intRowIndex As Integer

'--------------------------------------------------------------
'処理対象行判断
' カレント行が判断できない場合は、処理を行わない。
'--------------------------------------------------------------
intRowIndex = GRDMEISAI.CurrentRowIndex
If intRowIndex < 0 Then Exit Sub

'--------------------------------------------------------------
'元データの対象行を削除
'--------------------------------------------------------------
lTable.Rows.RemoveAt(intRowIndex)

'--------------------------------------------------------------
'DataGridにデータを再セット
'--------------------------------------------------------------
GRDMEISAI.DataSource = vPubDataSet.Tables("TNDF")

End Sub
*****************************************************************************************************

コードは上記のように書いています.
DataGridのヘッダで上記の処理を呼び出した時に,
CurrentRowIndexが0なので1行目のデータを削除しています.
なぜCurrentRowIndexは-1ではないのでしょうか?

上記処理が呼び出されたとき,現在の選択行がDataGrigのデータかデータ以外のところかを判別する方法はありますでしょうか?

宜しくお願い致します.


引用返信 編集キー/
■15718 / inTopicNo.2)  Re[1]: DataGridのCurrentRowIndex
□投稿者/ やじゅ (256回)-(2008/03/19(Wed) 11:55:12)
No15716 (アラリ さん) に返信
> VB.NET2003
>
> DataGridのヘッダで上記の処理を呼び出した時に,
> CurrentRowIndexが0なので1行目のデータを削除しています.
> なぜCurrentRowIndexは-1ではないのでしょうか?
>
> 上記処理が呼び出されたとき,現在の選択行がDataGrigのデータかデータ以外のところかを判別する方法はありますでしょうか?
>

ヘッダ部を選択すれば、CurrentRowIndex=-1になりそうですが、なりませんか?
あとは、IsSelectedメソッドとか使えないかなー
http://www.microsoft.com/japan/msdn/community/gdn/ShowPost-25734.htm
引用返信 編集キー/
■15724 / inTopicNo.3)  Re[2]: DataGridのCurrentRowIndex
□投稿者/ シャノン (329回)-(2008/03/19(Wed) 14:02:09)
No15718 (やじゅ さん) に返信
> ヘッダ部を選択すれば、CurrentRowIndex=-1になりそうですが、なりませんか?

なりません。
DataGrid に行が一行もなくても CurrentRowIndex は 0 になります。まったくもう。
引用返信 編集キー/
■15725 / inTopicNo.4)  Re[1]: DataGridのCurrentRowIndex
□投稿者/ シャノン (330回)-(2008/03/19(Wed) 14:08:37)
No15716 (アラリ さん) に返信

DataGrid に設定されているデータソースの方から現在の行が取得できます。

Dim cm As CurrencyManager = DirectCast( _
    Me.DataGrid.BindingContext(Me.DataGrid.DataSource, Me.DataGrid.DataMember), CurrencyManager)

Dim index As Integer = cm.Position

この index が現在選択されている行番号です。
選択されていないときは -1 になります。

引用返信 編集キー/
■15729 / inTopicNo.5)  Re[2]: DataGridのCurrentRowIndex
□投稿者/ アラリ (2回)-(2008/03/19(Wed) 15:50:52)
やじゅさん、シャノンさん
ご回答ありがとうございます.

この件に関しまして解決しました.
原因と解決法について説明させていただきます.
DataGridはDataGrid1とします.

まずヘッダ部を選択しているのにCurrentRowIndexが-1ではなく0となっていた原因ですが、

 DataGrid1.DataSource = DataTable1

とした後に、

GRDMEISAI.Select()
GRDMEISAI.CurrentCell = New DataGridCell(0, 0)

とし、先頭行先頭列にフォーカスを当てていました.
この状態でDataGridを表示するとCurrentRowIndexは0です.
一度でもヘッダ行を左クリックするとCurrentRowIndexは-1になるのですが、
左クリックをせずに右クリック→コンテキストメニュー起動 としていたためCurrentRowIndexは0のままでした.

次にMouseDownイベントを作成し右クリック時にもCurrentRowIndexを取得し処理を行えるようにしました.

*******************************************************************************************************************
Private Sub DataGridView1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) _
Handles GRDMEISAI.MouseDown

'右ボタンの確認
If e.Button = Windows.Forms.MouseButtons.Right Then

'マウス下のセルを取得
Dim lHitTestInfo As DataGrid.HitTestInfo = GRDMEISAI.HitTest(e.X, e.Y)

With lHitTestInfo

'セル(行ヘッダ)では、コンテキストメニューを使用不可
If .Row.Equals(-1) Then
GRDMEISAI.ContextMenu = Nothing
Else
GRDMEISAI.ContextMenu = ctmGrd
End If

End With

End If
End Sub
*******************************************************************************************************************

自分の書いたソースが原因でした.
お騒がせしてすいませんでした.




解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -