GD All、
私は以下の課題の解決策を探しています。
データグリッドビューがバインドされていないフォームがあります。dgには、使用するメソッドをユーザーが選択できる列が1つ追加されています。イベントの状態はデータベースに保存され、フォームを再度開いた後、コードはイベントが「開いている」状態にあるかどうかを確認します。開いている場合は、以前に選択したメソッドをデータグリッド内のメソッドと比較し、以前に設定する必要があります。 「選択された」メソッドになるようにアクティブ化されたメソッド。
それでも、残念ながらこれを機能させることができないようです...
以下のコードは、dg内のメソッドをループして値を比較します。これが、methodIDに一致する場合は、値を「True」またはTrueValueに設定する必要があります。
これは、データベースチェックがtrueを返し、フォームが完全に初期化された後に初期化さsession.methodID
れます。ここで、は返されたLINQクエリのフィールドです。
For Each r As DataGridViewRow In dgMethods.Rows
If r.Cells(1).Value = session.methodID Then
Dim c As DataGridViewCheckBoxCell = r.Cells(0)
c.Value = c.TrueValue
End If
Next
残念ながら、これではチェックボックスが「チェック済み」に設定されません。ループの実行との間の比較評価r.Cells(1).Value
し、session.methodID
正確に正しいとトリガを。
興味深いのは、「CellContentClick」イベントの後に同様のループを実行すると、期待どおりに実行されることです。(以下の例では、すべてのチェックボックス値をチェック済みに設定しています)
Private Sub dgMethods_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgMethods.CellContentClick
'Only single selection allowed, so clear table before submitting new selection
For Each r As DataGridViewRow In dgMethods.Rows
Dim c As DataGridViewCheckBoxCell = r.Cells(0)
c.Value = c.TrueValue
Next
dgMethods.CommitEdit(DataGridViewDataErrorContexts.Commit)
End Sub
だから、どうやらでループを呼び出すだけとイベントがトリガーされたdgMethods
ときの状態に違いがあるようですが、dgMethods.CellContentClick
どちらかわかりませんか?CheckBox列を設定しようとする投稿はたくさんありますが、どれも機能させることができませんでした。
誰かが何か考えを持っていますか?
私はあなたの提案をいただければ幸いですか?
GD All、
さらに検索した後、私は次の興味深い行動に出くわしました。
メソッド選択プロセスは「frmAddEvent」と呼ばれるフォームの一部であり、frmAddEvent
フォームは以下のルーチンを使用してメインフォームから呼び出されます。
新しいフォームインスタンスが作成され、その後InitializeForm()
、GUIDパラメータを使用して対応するデータを取得してフォームフィールドを設定する、呼び出されたフォームクラスのパブリックサブを使用して入力されます。
If Not (isOpened(rsTankName.unqID)) Then
Dim newForm As New frmAddEvent() '(rsTankName)
newForm.InitializeForm(rsTankName)
newForm.Show()
Else
End If
初期化サブは、いくつかのデータテーブルをクエリし、該当する場合は、新しいフォームインスタンスの対応するフィールドを正しく設定します。その設定の一部はmethod
、dgMethods
datagridviewでの選択です。
以下のコードは完全に機能するため、フォームを呼び出す順序によってすべての違いが生じるように見えます。
If Not (isOpened(rsTankName.unqID)) Then
Dim newForm As New frmAddEvent() '(rsTankName)
newForm.Show()
newForm.InitializeForm(rsTankName)
Else
End If
したがって、イベントnewForm.InitializeForm(rsTankName)
後にafterを呼び出すと、newForm.Show
datagridviewがCheckBoxColumnを正しく設定できるようになります。
実際のチェックボックス自体は、新しいフォームインスタンスを作成したShow
直後に、データグリッドのDataGridViewCheckBoxColumnプロパティを持つセルとして「使用可能」であるにもかかわらず、実際にはコマンドでのみ生成されるためと考えられNew frmAddEvent
ます。実際のCheckBoxとそれに対応するCheckedStateは、newForm.Show
イベントが呼び出される前には作成されません。チェックボックスが表示用に作成されたとき(newForm.Show
イベント中)、実際の値との比較は行われていないように見えます。
したがって、新しいフォームの開始時にチェックボックス列Show
を設定するには、DataGridViewCheckBoxColumn値を設定する前にイベントを呼び出す必要があります。そうしないと、チェックボックスに「チェック済み」と表示されません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加