Creo, que sé lo que está sucediendo. Debe ser por que son idénticos los nombres de columnas ( el nombre de tu columna del combo tiene el mismo nombre de la columna que contiene el valor que viene de la BD). Para evitar eso puedes renombrar la columna que viene de tu BD.
Cita:
Iniciado por jarogo
Dim Conexion As String
Dim Sql As String
Dim DataAdapter As SqlDataAdapter
Dim DataSet As New DataSet
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Conexion = "Data Source=Equipo;Initial Catalog=Datos;Persist Security Info=True;User ID=Sa;Password=XXXX"
Sql = "SELECT CodigoEmpresa, CodigoArticulo, Inactivo as Inact FROM Articulos ORDER BY CodigoArticulo"
DataAdapter = New SqlDataAdapter(Sql, Conexion)
DataSet.Reset()
DataAdapter.Fill(DataSet, "Articulos")
Dim a As New DataGridViewTextBoxColumn
a.DataPropertyName = "CodigoEmpresa"
a.Name = "CodigoEmpresa"
DataGridView1.Columns.Add(a)
Dim b As New DataGridViewTextBoxColumn
b.DataPropertyName = "CodigoArticulo"
b.Name = "CodigoArticulo"
DataGridView1.Columns.Add(b)
Dim c As New DataGridViewComboBoxColumn
c.DataPropertyName = "Inact"
c.Name = "Inactivo"
c.DataSource = GetDatos()
c.DisplayMember = "valor"
c.ValueMember = "key"
DataGridView1.Columns.Add(c)
Me.DataGridView1.AutoGenerateColumns = False
Me.DataGridView1.DataSource = Nothing
Me.DataGridView1.DataSource = DataSet.Tables("Articulos")
End Sub
Private Function GetDatos() As DataTable
Dim dt As New DataTable
dt.Columns.Add("valor")
dt.Columns.Add("key")
Dim row As DataRow = dt.NewRow
row("valor") = "Si"
row("key") = "-1"
dt.Rows.Add(row)
row = dt.NewRow
row("valor") = "No"
row("key") = "0"
dt.Rows.Add(row)
Return dt
End Function
Puedes enlazar la columna que viene de la BD con la propiedad DataPropertyName como lo estás haciendo. O bien dejar esa columna suelta y ocultarla, pero realizar la asignación respectiva de forma manual, inmediatamente luego de cargar los datos a la grilla con un for each:
Código Vb.Net:
Ver originalDim Row as DataRow
Me.DataGridView1.DataSource=DataSet.Tables("Articulos")
for each Row in Me.DataGridView1.Rows
Row.Cells ("Inact").Value = Row.Cells ("Inactivo").Value
Next