こんばんは。
DataGridViewで最終行を選択出来なくて悩んでいます。
DataGridViewで1行選択し「削除」ボタンで論理削除(DELFLG=1をセットする)する
【例】
初期表示データが3件表示される
下から順番に選択して削除していく
すると1番目(最終行)、2番目(真ん中)は問題なく削除される
最後の行(先頭行)が選択出来なくなります。
(DataGridView1_RowEnter)イベントが発生しなく」なるみたいです!
なぜ、DataGridView1_RowEnterが発生しないのでしょうか?
他に行を選択したということがわかるイベントはあるのでしょうか?
よろしくお願いします。
【選択処理】
選択した行の内容を画面上のテキストエリアに表示している
Private Sub DataGridView1_RowEnter(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.RowEnter
If Me.DataGridView1.SelectedRows.Count > 0 Then
Me.TextBox1.Text = Me.DataGridView1.Rows(e.RowIndex).Cells(0).FormattedValue
Me.TextBox2.Text = Me.DataGridView1.Rows(e.RowIndex).Cells(2).FormattedValue
End If
End Sub
【削除ボタン処理】
選択行のキーを元に検索し該当したデータに削除フラグをセットする
DataGridView1より選択データが消える
Dim Row As DataSet.Test_Row
Row = Dt.FindByNo(Index)
If Row Is Nothing Then
MessageBox.Show("データを選択してください", "エラーメッセージ")
Else
Row("DELFLG") = 1
End If
テーブルの参照方法は次のようにやっています。
DataSet
BindingSource
TableAdapter
DataGridViewにバインドしています。
【Form1.Load】データを取得して、フィルターをかける
Using Ta As New Test_DataSetTableAdapters.TestTableAdapter
Dt = Ta.GetData()
End Using
TestBindingSource.DataSource = Dt
TestBindingSource.Filter = ("DELFLG = 0")
【Form1】
Private Dt As Test_DataSet.TestDataTable
DataGridViewで選択行を取得する方法ですが
RowEnter以外になにかあるのでしょうか?
よろしくお願いします。
バージョン書いてないけど、固有のコードがあるから[VB2008]ですかねぇ。
新しい技術はノウハウの蓄積が少ないですから、回答も少ないでしょう。
そうなると自分で調べるしかないんですよね。
[VB2005]で RowEnter と "DELFLG" = 1 の処理だけ作ってみたけど、セル1個
選択の時には条件が揃わないから、TextBox は更新されず、動きがいまいちに
感じました。SelectionMode とかも変えてるんじゃないのかなぁ。。。
定義されてない変数もあるし。。。
よく分からなかったので。。。
[DataGridView メンバ]
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.datagridview_members.aspx
イベントを中心にそれらしいのを上から試していけばいいのでは?
単純に CurrentCellChanged でも SelectedRows を確認すれば
有効じゃないかと思うし、RowHeaderMouseClick とかも使えるかも
しれないね。SelectionChanged とか。
>RowEnter
>行が入力フォーカスを受け取り、現在の行になったときに発生します。
イベント発生しなかった原因は
最後の1行 = 現在の行
のためイベントが発生しないのではないでしょうか?
Click系とかMouseDown(UP)あたりではどうですか?
#削除したときに現在選択されているRowのデータを表示する
#ってのでも回避できそうですが・・・。
みなさん、ありがとうございます。
VS2005を使用しています。
>Click系とかMouseDown(UP)あたりではどうですか?
具体的にどのように記述するとよろしいのでしょうか?
よろしくお願いします。
みなさん、お世話になります。
Private Sub DataGridView1_MouseClickでやってみました。
If Me.DataGridView1.SelectedRows.Count > 0 Then
Me.TextBox1.Text = Me.DataGridView1.Rows(e.RowIndex).Cells(0).FormattedValue
Me.TextBox2.Text = Me.DataGridView1.Rows(e.RowIndex).Cells(2).FormattedValue
End If
「e.RowIndex」でエラーになります。
'System.Windows.Forms.MouseEventArgs' のメンバではありません。
どのように対処すればよろしいのでしょうか?
DataGridView1_CellMouseClick
の方ではだめですか?
DataGridView1.SelectionModeがFullRowSelectになっている時と
それ以外で少し動作が変わってしまいますが。
「と」さんありがとうございます。
DataGridView1.SelectionModeがFullRowSelectです。
DataGridView1_CellMouseClickでやってみましたが
選択できない時があります。
同じような現象です。
「と」さんありがとうございます。
DataGridView1.SelectionModeがFullRowSelectです。
DataGridView1_CellMouseClickでやってみましたが
選択できない時があります。
同じような現象です。
ブレークで
> If Me.DataGridView1.SelectedRows.Count > 0 Then
の所で止めてもイベントが発生しませんか?
今回のDataGridView1_CellMouseClickは
そもそも選択されたときですから
> If Me.DataGridView1.SelectedRows.Count > 0 Then
は抜いてますよね?
イベントが発生するかが鍵だと思うのです。
ごめんなさい
提示の情報だけだと同じ環境を完璧に再現できていないかも
しれません。
なんか*の行とか出てきてます。
>なんか*の行とか出てきてます。
AllowUserToAddRowsプロパティがTrueなんじゃないかしら。
ツイート | ![]() |