0

GroupGrid と ProductGrid の 2 つの datagridview があります。Groupgrid には 3 つの列が含まれます。1つ目はチェックボックス列です。from がロードされ、gGroupArray に格納されると、GroupGrid のデータが取り込まれます。gGroupArray と gProductArray のカテゴリ ID を比較して、チェックボックスがオンになっているときに Productgrid にデータを入力し、チェックされていないときに行を削除する必要があります。入力する必要があるデータは、gProductArray という名前の配列にあります。

使用されるイベントとその方法。チェックボックスがチェックされているかチェックされていないかの状態を確認する方法。私は次のことを試しました

  Private Sub groupGrid_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles GroupGrid.CellClick
    If e.ColumnIndex = 0 And Convert.ToBoolean(GroupGrid(e.ColumnIndex, e.RowIndex).Value) = True Then

        Dim i As Integer = 0
        Dim categoryId As Integer = GroupGrid.Rows(e.RowIndex).Cells("CategoryID").Value()

        If gProductArray.Length < 0 Then Exit Sub

        While i < gProductArray.Length
            If categoryId = gProductArray(i).iCategoryID Then
                ProductGrid.Rows.Add()
                ProductGrid.Rows(i).Cells("ProductGroup").Value() = gProductArray(i).tProductGroup
                ProductGrid.Rows(i).Cells("Product").Value() = gProductArray(i).tProductName

                ProductGrid.Rows(i).Cells("CategoryID").Value() = gProductArray(i).iCategoryID
                ProductGrid.Rows(i).Cells("LicenseProductID").Value() = gProductArray(i).lLicenseProductID
                ProductGrid.Rows(i).Cells("SNRequired").Value() = gProductArray(i).bSNRequired
            End If
            i = i + 1
        End While
    End If
End Sub
4

1 に答える 1

0

CellClick Event、セルがクリックされるたびに呼び出されます (チェックボックスを変更するかどうかは関係ありません)。いずれにせよ、このイベントはセルの値が変更される前に呼び出されるため、以前の状態が取得されます (Falseチェックする場合)。を検討した方がよいでしょうCellValueChanged Event

Private Sub GroupGrid_CellValueChanged(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles GroupGrid.CellValueChanged

    If started AndAlso e.ColumnIndex = 0 AndAlso GroupGrid(e.ColumnIndex, e.RowIndex).Value IsNot Nothing Then

        Dim isChecked As Boolean = DirectCast(GroupGrid(e.ColumnIndex, e.RowIndex).Value, Boolean)
        If (isChecked) Then
            'Cell is checked
        Else
            'Cell is not checked
        End If

    End If

End Sub

ご覧のとおり、ブール変数 ( started) を含めています。これはグローバルに定義され、 の最後で true に設定されますForm Load Event。このフラグを使用する理由は、アクションが完了するCellValueChanged Event前に を呼び出すことができるためです。特定のForm LoadDataGridView. 心に留めておかなければならないその他のことは、チェックボックスをクリックした後では値が変更されない (したがって、このイベントはトリガーされない) ということです。入力)。チェックボックス セルは、テキスト セルと同じように動作します。テキスト タイプのセルに文字列を入力すると、値は自動的に保存されません (Enter キーを押すか、別のセルを選択する必要があります)。この最後の副作用を回避するために、追加のアプローチを考え出す必要があるかもしれません。たとえばSendKeys.Send("{ENTER}")CellClick Event(クリック/チェックの直後に値を強制的に保存するため)

于 2013-09-20T13:35:28.997 に答える