ho un problema con la classe personalizzata DataGridComboBoxColumn.
Funziona benissimo se nella query sql utilizzo una sola tabella, invece dà errore se uso un INNER JOIN!
Codice:
codice:
Imports System.Data.OleDb
Public Class Index
    Inherits System.Windows.Forms.Form
    Dim DS As DataSet
    Dim MyAdapter As OleDbDataAdapter

#Region " Codice generato da Progettazione Windows Form "
'bla bla bla
#End Region

    Private Sub Index_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Try
        Dim MyConnection As OleDbConnection
        MyConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=D:\vs project\Tarcisio\conti.mdb;")
        DS = New DataSet
        MyAdapter = New OleDbDataAdapter
        MyAdapter.SelectCommand = New OleDbCommand("SELECT * FROM [tblGruppo] INNER JOIN [tblSottoGruppo] ON [tblGruppo].[ID] = [tblSottoGruppo].[IDGruppo]", MyConnection)
        'MyAdapter.SelectCommand = New OleDbCommand("SELECT * FROM [tblGruppo]", MyConnection)
        MyAdapter.Fill(DS, "[tbl]")
        DataGrid1.SetDataBinding(DS, "[tbl]")
        DataGrid1.DataSource = DS.Tables("[tbl]")
        Funzioni()
        'MyAdapter.Dispose()
        'DS.Dispose()
        'MyConnection.Dispose()
        'Catch Ex As Exception
        'Me.lblIntroduzione.Text = Ex.Message
        'End Try
    End Sub
    Sub Funzioni()
        'Dim cm As CurrencyManager
        'cm = Me.BindingContext(DataGrid1.DataSource)
        'CType(cm.List, DataView).AllowNew = False
        '**********************
        'DataGrid1.Enabled = False
        Dim ts1 As New DataGridTableStyle
        ts1.MappingName = "[tbl]"
        'ts1.AllowSorting = False

        Dim dCol As New DataGridTextBoxColumn
        dCol.MappingName = "tblSottoGruppo.Motivazione"

        Dim dCol2 As New DataGridComboBoxColumn(New ComboValueChanged(AddressOf MyComboValueChanged))
        dCol2.MappingName = "tblGruppo.Motivazione"
        dCol2.ColumnComboBox.DisplayMember = dCol2.MappingName
        dCol2.ColumnComboBox.DataSource = DS.Tables("[tbl]").Columns("tblGruppo.Motivazione").Table '.DataSet
        dCol2.ColumnComboBox.DropDownStyle = ComboBoxStyle.DropDownList

        ts1.PreferredRowHeight = (dCol2.ColumnComboBox.Height + 3)
        ts1.GridColumnStyles.Add(dCol)
        ts1.GridColumnStyles.Add(dCol2)
        ts1.DataGrid = DataGrid1
        DataGrid1.TableStyles.Clear()
        DataGrid1.TableStyles.Add(ts1)
        '/*********************
    End Sub
    Public Sub MyComboValueChanged(ByVal rowChanging As Integer, ByVal newValue As Object)

    End Sub
End Class
codice:
Public Class DataGridComboBoxColumn
    Inherits DataGridTextBoxColumn
    Public WithEvents ColumnComboBox As ComboBox
    Private WithEvents _source As CurrencyManager
    Private _rowNum As Integer
    Private _isEditing As Boolean
    Private _valueChanging As ComboValueChanged
    Public Shared _RowCount As Integer
    'Fields
    'Constructors
    'Events
    'Methods
    Shared Sub New()

    End Sub

    Public Sub New(ByVal valueChanging As ComboValueChanged)
        MyBase.New()
        _isEditing = False
        _RowCount = -1
        _valueChanging = valueChanging
        ColumnComboBox = New ComboBox
        AddHandler ColumnComboBox.Leave, New EventHandler(AddressOf LeaveComboBox)
        AddHandler ColumnComboBox.Enter, New EventHandler(AddressOf ComboMadeCurrent)
        AddHandler ColumnComboBox.SelectedIndexChanged, New System.EventHandler(AddressOf ComboIndexChanged)

    End Sub
    Protected Overloads Overrides Sub Edit(ByVal source As CurrencyManager, ByVal rowNum As Integer, ByVal bounds As Rectangle, ByVal readOnly1 As Boolean, ByVal instantText As String, ByVal cellIsVisible As Boolean)

        'on very first pass, set this static member to number of items in tables
        'check to see if we are on the new row
        If (_RowCount = -(1)) Then
            _RowCount = source.Count
        End If
        If (_RowCount < source.Count) Then
            ' remove the one that has been added
            ' and add a new to sync 
            source.RemoveAt((source.Count - 1))
            source.AddNew()
        End If
        _RowCount = source.Count
        MyBase.Edit(source, rowNum, bounds, readOnly1, instantText, cellIsVisible)
        _rowNum = rowNum
        _source = source
        ColumnComboBox.Parent = Me.TextBox.Parent
        ColumnComboBox.Location = Me.TextBox.Location
        ColumnComboBox.Size = New Size(Me.TextBox.Size.Width, ColumnComboBox.Size.Height)
        RemoveHandler ColumnComboBox.SelectedIndexChanged, New System.EventHandler(AddressOf ComboIndexChanged)
        ColumnComboBox.Text = Me.TextBox.Text
        AddHandler ColumnComboBox.SelectedIndexChanged, New System.EventHandler(AddressOf ComboIndexChanged)
        Me.TextBox.Visible = False
        ColumnComboBox.Visible = True
        ColumnComboBox.BringToFront()
        ColumnComboBox.Focus()

    End Sub
    Protected Overloads Overrides Function Commit(ByVal dataSource As CurrencyManager, ByVal rowNum As Integer) As Boolean

        If _isEditing Then
            _isEditing = False
            SetColumnValueAtRow(dataSource, rowNum, ColumnComboBox.Text)
        End If
        Return True

    End Function
    Private Sub ComboIndexChanged(ByVal sender As Object, ByVal e As EventArgs)

        _valueChanging(_rowNum, ColumnComboBox.Text)

    End Sub
    Private Sub ComboMadeCurrent(ByVal sender As Object, ByVal e As EventArgs)

        _isEditing = True

    End Sub
    Private Sub LeaveComboBox(ByVal sender As Object, ByVal e As EventArgs)

        If _isEditing Then
            SetColumnValueAtRow(_source, _rowNum, ColumnComboBox.Text)
            _isEditing = False
            Invalidate()
        End If
        ColumnComboBox.Hide()

    End Sub
End Class
Public Delegate Sub ComboValueChanged(ByVal changingRow As Integer, ByVal newValue As Object)
è un po' lunghetto il codice, però non saprei dove mettere mani per risolvere l'errore. Quando provo a selezionare la colonna ComboBox mi viene:
codice:
Eccezione non gestita di tipo "System.ArgumentException" in system.windows.forms.dll

Informazioni aggiuntive: Impossibile creare un elenco di elementi figlio per il campo tblGruppo.

SULLA RIGA:
ColumnComboBox.Parent = Me.TextBox.Parent
grazie!