DOBON.NET DOBON.NETプログラミング掲示板過去ログ

datagridの現在行を取得

環境/言語:[WinXP Pro VB.NET2002]
分類:[.NET]

http://dobon.net/vb/dotnet/datagrid/currentrow.html
を参照してdatagridの現在の行を取得したのですが
レコードが0件の場合、datagridにマウスカーソルを合わせると※印でエラーになります。
エラーを出ないようにするにはどのようにすればよろしいでしょうか?

Dim bm As BindingManagerBase = _
DataGrid1.BindingContext(DataGrid1.DataSource, DataGrid1.DataMember)
※Dim drv As DataRowView = CType(bm.Current, DataRowView)
Dim dr As DataRow = drv.Row
■No11297に返信(ちひろさんの記事)
> http://dobon.net/vb/dotnet/datagrid/currentrow.html
> を参照してdatagridの現在の行を取得したのですが
> レコードが0件の場合、datagridにマウスカーソルを合わせると※印でエラーになります。
> エラーを出ないようにするにはどのようにすればよろしいでしょうか?
>
> Dim bm As BindingManagerBase = _
> DataGrid1.BindingContext(DataGrid1.DataSource, DataGrid1.DataMember)
> ※Dim drv As DataRowView = CType(bm.Current, DataRowView)
> Dim dr As DataRow = drv.Row

確認はしていませんが、bm.Currentの値がDataRowViewにキャスト(変換)できない値(たとえばNothingとか)が入っているのではないでしょうか?
DataRowViewにCTypeする前にIF文などでbm.Currentの内容を確認してからCTypeするようにすれば良いのではないかと思います。

例、
If bm.Current Is Nothing Then
Return
End If
Dim drv As DataRowView = CType(bm.Current, DataRowView)
Dim dr As DataRow = drv.Row


>
u1さんありがとうございます。
Currentではエラーが出ましたがCountで出来ました。

If bm.Count = 0 Then Return
Dim drv As DataRowView = CType(bm.Current, DataRowView)
Dim dr As DataRow = drv.Row
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板