DataGirdViewへの行追加(実際はバインドされたDataTable)後、フォーカスを新規行に移動するには?

解決


モモ  2009-02-12 23:01:07  No: 145762

VB.NET2005です。
DataGirdViewへ新規行を追加(実際はバインドされたDataTableに
直接行っています)後、フォーカスを移動したいと思い、
下記コードのように最終行へ移動させています。
--------------------------------------------
'行追加
Dim dr As DataRow
dr = DataTable1.NewRow()
dr("namae") = ""
DataTable1.Rows.Add(dr)
'新規行へ移動
DataGridView1.CurrentCell = 
  DataGridView1(0,DataGridView1.Rows.Count - 1)
--------------------------------------------
ところがこれですと、DataGridView側でソート(ヘッダクリック等で)
されている場合、RowIndexが変更されてしまう(空行なので一番上に
移動します)ため、正しい(新規)行へ移動しません。
こういった場合はどのように新規行を判定すればよろしいのでしょうか。
連続して行追加される場合がありますので、行の中身("namae"=Null?等)
では判断できません。
グリッドの途中に行を追加する場合もありますので、
そのやり方を教えて下さい。
よろしくお願い致します。


魔界の仮面弁士  2009-02-13 01:47:45  No: 145763

こういう方法は如何でしょう。

For Each row As DataGridViewRow In DataGridView1.Rows
  Dim rowView As DataRowView = TryCast(row.DataBoundItem, DataRowView)
  If rowView IsNot Nothing And rowView.Row Is dr Then
    DataGridView1.CurrentCell = DataGridView1(0, row.Index)
    Exit For
  End If
Next


モモ  2009-02-13 02:10:44  No: 145764

お返事ありがとうございます。
なるほど!
ばっちりです。
いつもありがとうございます。
またよろしくお願い致します。


魔界の仮面弁士  2009-02-13 09:21:27  No: 145765

> ばっちりです。
ごめんなさい、よく見たら間違っていました。。。

このままだと、Nothing 判定が無意味になってしまいますので、
And → AndAlso に変更しておいてください。


モモ  2009-02-16 23:33:31  No: 145766

訂正分、了解です。
ご親切にありがとうございました!


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加