0

データ ソースの構造は同じですが、データが異なります。1 つは保存される行 (表示モード) に使用され、もう 1 つは追加または編集される行 (編集/新しい行) に使用されます。どうすればそれを達成できますか。

ID、名前、およびアクティブ (ビット) を持つ標準のルックアップ テーブルを参照する標準の外部キー列があります。コンボ ボックス列は、そのルックアップ テーブルを使用してリストを表示しますが、アクティブなアイテムのみを表示します。ルックアップ アイテムが使用され、後で非アクティブ化されたとします (アクティブ = 0)。ID がリストに見つからないため、コンボ ボックスの列にエラーが表示されるようになりました。誰かがそれを解決する方法を知っていますか?

4

1 に答える 1

1

あなたがまだ探しているかどうかはわかりませんが、私はちょうど同じ問題に遭遇しました。これが私がそれに対処した方法です、それがあなたに役立つことを願っています。

適切なデータソースセットを使用してDataGridViewComboCellを返す関数を定義します(他の場所で定義されたコレクションオブジェクト。この例では、データソースにデータを入力するためにEntitySpacesを使用していることに注意してください)。

Private Function GetStockComboDataSource(ByVal type As eStockComboType) As DataGridViewComboBoxCell
        Try
            Dim cell As New DataGridViewComboBoxCell
            Select Case type
                Case eStockComboType.StockIn

                    cell.DataSource = Me.StockInCol.Query.LoadDataTable
                    cell.DisplayMember = "FullName"
                    cell.ValueMember = JCStockInMetadata.ColumnNames.StockItemID

                Case eStockComboType.StockItem

                    cell.DataSource = StockItemCol.Query.LoadDataTable
                    cell.ValueMember = JCStockItemMetadata.ColumnNames.StockItemID
                    cell.DisplayMember = "FullName"
            End Select

            Return cell
End Function

コンボデータソースの設定に関しては(たとえば、ここではRowEnterイベントを使用します):

    Private Sub dgvStock_RowEnter(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvStock.RowEnter
        Try
            If IsNumeric(Me.dgvStock.Rows(e.RowIndex).Cells("ID").Value) Then
                Dim intValue As Integer = Convert.ToInt32(Me.dgvStock.Rows(e.RowIndex).Cells("Stock Item").Value)
                Me.dgvStock.Rows(e.RowIndex).Cells("Stock Item") = GetStockComboDataSource(eStockComboType.StockItem)
                Me.dgvStock.Rows(e.RowIndex).Cells("Stock Item").Value = intValue
            Else
                Me.dgvStock.Rows(e.RowIndex).Cells("Stock Item") = GetStockComboDataSource(eStockComboType.StockIn)

            End If
        Catch ex As Exception
            JCExceptionLogger.LogException(ex)
        End Try

End Sub

ここでは、ID列が数値であるかどうかに応じてコンボデータソースを切り替えますが、必要なビジネスロジックを実装できます。コンボ(intValue)を設定する前に、セルの値を保存することに注意してください。これは必要なようです。そうでない場合、コンボは空白として表示されます。

于 2008-11-30T16:45:14.470 に答える