Ver Mensaje Individual
  #4 (permalink)  
Antiguo 02/12/2010, 09:40
Avatar de devilinside
devilinside
 
Fecha de Ingreso: marzo-2008
Ubicación: En Perú
Mensajes: 73
Antigüedad: 16 años, 1 mes
Puntos: 6
Respuesta: Datagridview con columna combo

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 Ver Mensaje
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 original
  1. Dim Row as DataRow
  2.     Me.DataGridView1.DataSource=DataSet.Tables("Articulos")
  3.     for each Row in Me.DataGridView1.Rows
  4.          Row.Cells ("Inact").Value =   Row.Cells ("Inactivo").Value  
  5.     Next

Última edición por devilinside; 03/12/2010 a las 09:24