「BaseChange」というオブジェクトのリストにバインドされた DataGridView があります。BaseChange オブジェクトは 4 つのプロパティで構成されています...
- 変更タイプ
- ステータスを変更する
- 変更の説明
- LastChangeDate
datagridview には、4 つすべての値と 5 番目 (「colIsSelected」と呼ばれるチェックボックス列) の列があります。リストをグリッドにバインドしてアイテムを表示するのに問題はありません。
問題は、オプション strict が有効になっていると、グリッドで選択されたアイテムを取得するクエリが暗黙のキャスト エラーを発生させることです。
これはクエリです...
Dim _changes As List(Of BaseChange)
_changes = (From _row As DataGridViewRow In dgvChanges.Rows() _
Where Convert.ToBoolean(_row.Cells(NAME_COLUMN_IS_SELECTED).Value) = True _
Select DirectCast(_row.DataBoundItem, BaseChange)).ToList()
...そして、オプションstrict offを使用すると正しい結果が得られます。暗黙的なキャストの波線は "_row As DataGridViewRow" コードにあり、完全なメッセージは " Implicit conversion from 'Object' to 'System.Windows.Forms.DataGridViewRow' " です。
「As DataGridViewRow」をクエリから除外すると、_row.Cells と _row.DataBoundItem で遅延バインディング エラーが発生し、これもオプション strict に失敗します。
Option Strict を有効にして VB で動作させるには、これが必要です。ここで何か不足していますか?誰にも提案がありますか?