Usuario
Añadir valores a columna creada en DataGridView

Pregunta
-
Con el codigo que adjunto intento crear una columna donde recoger un valor dependiente de otra columna ya existente en la consulta.
la columna se crea, pero no consigo que apareza ningún valor en las celdas correspondientes.
¿Cual es la forma de hacerlo?
Gracias,
With dgvAcumulados
.DataSource = CrearTabla("SumCajasEnAlmacenByCodigoLote ")
Dim NewColumna As New DataGridViewTextBoxColumn
NewColumna.Name = "Lote"
.Columns.Add(NewColumna)
Dim m_row As New DataGridViewRow
For Each m_row In dgvAcumulados.Rows
m_row.Cells("Lote").Value = DevuelveFechaJuliana(m_row.Cells("Fecha").Value)
Next
End With
Miguel Angel Martinez correomam@gmail.com- Cambiado Enrique M. Montejo jueves, 29 de septiembre de 2011 17:06 acceso a datos (De:Lenguaje VB.NET)
Todas las respuestas
-
En un principio el código parece correcto,
Podrias hacer una depuración y ver si está devolviendo datos las filas y el valor de la Fecha?
Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
Si la respuesta te ha sido util Votala.
Mi Blog: Jtorrecilla
Enlace a Faq de Winforms en Ingles Muy bueno -
-
Mira he hecho este pequeño ejemplo:
Dim t As New DataTable t.Columns.Add("a") t.Columns.Add("b") t.Columns.Add("c") Dim r As DataRow For I As Integer = 0 To 1500 r = t.NewRow r("a") = I r("b") = I + 1 r("c") = I + 2 t.Rows.Add(r) Next Me.DataGridView1.DataSource = t Me.DataGridView1.Columns.Add("Z", "Z") For Each row As DataGridViewRow In Me.DataGridView1.Rows If CInt(row.Cells("a").Value) Mod 2 = 0 Then row.Cells("Z").Value = "True" Else row.Cells("Z").Value = "False" End If Next
Y a mi si me pone valores en Z de forma correcta.
Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
Si la respuesta te ha sido util Votala.
Mi Blog: Jtorrecilla
Enlace a Faq de Winforms en Ingles Muy bueno -
-
Umh,
Que versión de VS estás usando?
Donde estás poniendo el código?
Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
Si la respuesta te ha sido util Votala.
Mi Blog: Jtorrecilla
Enlace a Faq de Winforms en Ingles Muy bueno -
-
Hola:
EJEMPLO1
Un Form con 1 boton (btnColumnaCalculada) y 1 DataGridView (DataGridView1)
Pegar el siguiente codigo.Imports System.Data.SqlClient
Public Class Form1
Inherits System.Windows.Forms.Form
Private oConnection As SqlConnection
Private oDataAdapter As SqlDataAdapter
Private oDataSet As DataSet
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' carga inicial del dataset y datagrid
oConnection = New SqlConnection("Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True")
oDataAdapter = New SqlDataAdapter("SELECT OrderID,CustomerID,Freight FROM Orders", oConnection)
oDataSet = New DataSet
oConnection.Open()
oDataAdapter.Fill(oDataSet, "Orders")
oConnection.Close()
Me.DataGridView1.DataSource = oDataSet
Me.DataGridView1.DataMember = "Orders"
End SubPrivate Sub btnColumnaCalculada_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnColumnaCalculada.Click
' al pulsar un botón, recuperamos del dataset asignado al datagrid
' un objeto dataview al que le añadimos una columna calculada,
' finalmente añadimos el dataview al datagrid
Me.DataGridView1.DataSource = Nothing
Dim colNueva As DataColumn = New DataColumn("ValorDoble")
colNueva.Expression = "Freight * 2"
Dim dvVistaDatos As DataView = oDataSet.Tables("Orders").DefaultView
dvVistaDatos.Table.Columns.Add(colNueva)
Me.DataGridView1.DataSource = dvVistaDatos
Me.btnColumnaCalculada.Enabled = False
End Sub
End ClassEJEMPLO2
Un Form con 1 DataGridView (DataGridView1)
Pegar el siguiente codigo.Imports System.Data.SqlClient
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim cnConexion As SqlConnection = New SqlConnection()
cnConexion.ConnectionString = "Data Source=.\SQLEXPRESS;Initial Catalog=AdventureWorks;Integrated Security=True"
Dim sSQL As String
sSQL = "select ProductID,StandardPrice,LastReceiptCost,(LastReceiptCost-StandardPrice) as Diferencia "
sSQL &= "from Purchasing.ProductVendor"
Dim cmdComando As SqlCommand = New SqlCommand(sSQL, cnConexion)
Dim daAdaptador As SqlDataAdapter = New SqlDataAdapter(cmdComando)
Dim dsDatos As DataSet = New DataSet()
daAdaptador.Fill(dsDatos, "ProductVendor")
Me.DataGridView1.DataSource = dsDatos
Me.DataGridView1.DataMember = "ProductVendor"
Dim DobleDiferencia As DataGridViewTextBoxColumn = New DataGridViewTextBoxColumn()
DobleDiferencia.HeaderText = "Doble Diferencia precios"
DobleDiferencia.Name = "Doble Diferencia"
Me.DataGridView1.Columns.Add(DobleDiferencia)
End SubPrivate Sub DataGridView1_CellFormatting(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting
If Me.DataGridView1.Columns(e.ColumnIndex).Name = "Doble Diferencia" Then
Dim ldDiferencia As Double = CDbl(Me.DataGridView1.Rows(e.RowIndex).Cells("Diferencia").Value)
e.Value = ldDiferencia * 2
End If
End Sub
End ClassEspero que te sirva
Un saludo desde Bilbo
Carlos -
Pues si has probado el código tal cual lo he puesto deberia funcionarte de forma correcta...
Si quieres sube el proyecto a algun servidor y lo miramos mas en detalle...
Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
Si la respuesta te ha sido util Votala.
Mi Blog: Jtorrecilla
Enlace a Faq de Winforms en Ingles Muy bueno -
Sigo haciendo pruebas:
Si pongo el DataGridView dentro de un Tab de un TabControl no actualiza la columna creada, si lo saco del Tab si funciona perfectamente, pero esto es cierto solo en este Form en concreto, si hago lo mismo en un Form que creo con un TabControl y hago lo mismo funciona perfectamente.
¿alguna idea?
Miguel Angel Martinez correomam@gmail.com -
No tiene ningun sentido que dentro del TAB no te funcione y fuera si, y en otro form si te funcione...
No tendrás algo en código que evita que se rellene la columna??
Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
Si la respuesta te ha sido util Votala.
Mi Blog: Jtorrecilla
Enlace a Faq de Winforms en Ingles Muy bueno -
hola
solo para descartar que no sea un problema d ela column generada dinamicamene
no has probado crear en e dseñador esa columna, no desde codigo sin especificar la propiedad DataPropertyName
esto debria bindear todas las columna menos esta, la cual la accederias e el loop
With dgvAcumulados
.DataSource = CrearTabla("SumCajasEnAlmacenByCodigoLote ")
For Each m_row As DataGridViewRow In dgvAcumulados.Rows
m_row.Cells("Lote").Value = DevuelveFechaJuliana(m_row.Cells("Fecha").Value)
NextEnd With
saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina -
hola
solo para descartar que no sea un problema d ela column generada dinamicamene
no has probado crear en e dseñador esa columna, no desde codigo sin especificar la propiedad DataPropertyName
esto debria bindear todas las columna menos esta, la cual la accederias e el loop
With dgvAcumulados
.DataSource = CrearTabla("SumCajasEnAlmacenByCodigoLote ")
For Each m_row As DataGridViewRow In dgvAcumulados.Rows
m_row.Cells("Lote").Value = DevuelveFechaJuliana(m_row.Cells("Fecha").Value)
NextEnd With
saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina
Leandro:No es problema de la columna, es algo relacionado con el control TabControl de ese formulario en concreto.
Miguel Angel Martinez correomam@gmail.com -
Al final que como ha quedado el tema mam01?
Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
Si la respuesta te ha sido util Votala.
Mi Blog: Jtorrecilla
Enlace a Faq de Winforms en Ingles Muy bueno -
-
pues puedo dar una idea mas,
en lugar de agregarle la columna al DataGridView
agrégala a tu Datatable que tienes enlazado al DGV
esa es la forma en que yo lo haria
Dim Tabla1 As DataTable = New DataTable("SumCajasEnAlmacenByCodigoLote") Ds.Tables.Add(Tabla1) Tabla1.Columns.Add("Lote", Type.GetType("System.Int32"))
donde quiero suponer tabla1 está enlazada con el DataGridView
me gustaría que dieras un poquito mas de detalle
para ver si en lugar de actualizar el DGV mejor actualizas la tabla
saludos
-
pues puedo dar una idea mas,
en lugar de agregarle la columna al DataGridView
agrégala a tu Datatable que tienes enlazado al DGV
esa es la forma en que yo lo haria
Dim Tabla1 As DataTable = New DataTable("SumCajasEnAlmacenByCodigoLote" ) Ds.Tables.Add(Tabla1) Tabla1.Columns.Add("Lote" , Type.GetType ("System.Int32" ))
donde quiero suponer tabla1 está enlazada con el DataGridView
me gustaría que dieras un poquito mas de detalle
para ver si en lugar de actualizar el DGV mejor actualizas la tabla
saludos
Omar:Si, puedo hacer lo quer tu dices, pero mas facil es añadir ese campo al Select de la consulta que genera la tabla.
Es una cuestión de curiosidad de porque funciona en el resto de Form y en este en concreto no.
Gracias.
Miguel Angel Martinez correomam@gmail.com -
pues puedo dar una idea mas,
en lugar de agregarle la columna al DataGridView
agrégala a tu Datatable que tienes enlazado al DGV
esa es la forma en que yo lo haria
Dim Tabla1 As DataTable = New DataTable("SumCajasEnAlmacenByCodigoLote" ) Ds.Tables.Add(Tabla1) Tabla1.Columns.Add("Lote" , Type.GetType ("System.Int32" ))
donde quiero suponer tabla1 está enlazada con el DataGridView
me gustaría que dieras un poquito mas de detalle
para ver si en lugar de actualizar el DGV mejor actualizas la tabla
saludos
Omar:He probado con
Dim m_Tabla As DataTable = CrearTabla("SumCajasEnAlmacenByCodigoLote ")
m_Tabla.Columns.Add("Lote", Type.GetType("System.Int32"))
For Each m_row As DataRow In m_Tabla.Rows
m_row.Item("Lote") = DevuelveFechaJuliana(m_row.Item("Fecha"))
'Para verificar que crea el Item con su valor correcto, y efectivamente lo hace
'MsgBox(m_row.Item("Lote"))
NextCrea la columna con su valores correctos, pero no los muestra en el DataGridView :-(
Miguel Angel Martinez correomam@gmail.com -
asi es ahora te falta entonces
el bound column properties
sabes como hacer eso desde el GridView?
en la parte superior derecha del grid dale a la flechita
luego dale a editar columnas
y luego agrega la columna y en la parte derecha en Data hay una opcion
llamada DataPropertyName, alli escribies el nombre de la columna que quieres
que te enlace lotes me parece
si no escribie de nuevo
ahorita lo arreglamos como no
-
asi es ahora te falta entonces
el bound column properties
sabes como hacer eso desde el GridView?
en la parte superior derecha del grid dale a la flechita
luego dale a editar columnas
y luego agrega la columna y en la parte derecha en Data hay una opcion
llamada DataPropertyName, alli escribies el nombre de la columna que quieres
que te enlace lotes me parece
si no escribie de nuevo
ahorita lo arreglamos como no
Eso ya lo hago por codigoWith dgvAcumulados
.DataSource = CrearTabla("SumCajasEnAlmacenByCodigoLote ")
Dim NewColumna As New DataGridViewTextBoxColumn
NewColumna.Name = "Lote"
.Columns.Add(NewColumna)
Dim m_row As New DataGridViewRow
For Each m_row In dgvAcumulados.Rows
m_row.Cells("Lote").Value = DevuelveFechaJuliana(m_row.Cells("Fecha").Value)
Next
End WithLa solución debe ser por codigo, no en modo diseño.
Gracias.
Miguel Angel Martinez correomam@gmail.com -
hola mam01, con la solucion que te da Omar no tienes que poner todo el código que tienes puesto tu: con poner esto valdria:
With dgvAcumulados
.DataSource = CrearTabla("SumCajasEnAlmacenByCodigoLote ")
End WithPorque se supone que en la función tabla has puesto que agregue en el Datatable el campo de la fechaJuliana.
De todas maneras me sigue pareciendo muy raro que las soluciones que te hemos indicado arriba no te hayan funcionado.
Podrias subir tu código a algun sitio para ver si hay alguna cosa rara?
Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
Si la respuesta te ha sido util Votala.
Mi Blog: Jtorrecilla
Enlace a Faq de Winforms en Ingles Muy bueno -
-