Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Agregar un campo a un datatable

2,942 views
Skip to first unread message

momak

unread,
Feb 11, 2004, 11:29:03 AM2/11/04
to
Buenas:
Ayer pregunté cómo se podía añadir un campo a un dataset que hubiera
rellenado previamente desde una tabla de una base de datos.
Parte de una de las respuesta fue:

"Debes agregarle la columna al DataTable (suponiendo que tenemos un
DataTable llamado oTabla) ...

oTabla.Columns.Add("NombreColumna",typeof(String));"

Después de dar unas pocas vueltas he probado:

" nombre_dataset.Tables("nombre_tabla").columns.add("nombre_columna",type)
"
el tipo que necesito para la nueva columna es INTEGER.

pues bien, si en el lugar del tipo pongo integer el depurador me dice:

"
Mensaje de error del compilador: BC30108: 'Integer' es un tipo y, por
tanto, no es una expresión válida.

Error de código fuente:

Línea 21: Dim dataset As System.Data.dataset = New
System.Data.dataset
Línea 22: dataAdapter.Fill(dataset)
Línea 23:
dataset.tables("tObras").columns.add("respuesta",integer)
Línea 24:
"

Si pongo integer entre "":

"
Mensaje de error del compilador: BC30311: Un valor de tipo 'String' no
se puede convertir en '2'.

Error de código fuente:

Línea 21: Dim dataset As System.Data.dataset = New
System.Data.dataset
Línea 22: dataAdapter.Fill(dataset)
Línea 23:
dataset.tables("tObras").columns.add("respuesta","integer")
Línea 24:
Línea 25:

"

Y por fin si no declaro el tipo sino que como parámetro de la propiedad
add del datacolumncollection paso únicamente el nombre que quiero para
la nueva columna (he visto en el classbrowser que es otra de las formas
de invocar esta propiedad) me sale el siguiente error:

"
Detalles de la excepción: System.NullReferenceException: Referencia a
objeto no establecida como instancia de un objeto.

Error de código fuente:


Línea 21: Dim dataset As System.Data.dataset = New
System.Data.dataset
Línea 22: dataAdapter.Fill(dataset)
Línea 23: dataset.tables("tObras").columns.add("respuesta")


"


No tengo sé que está mal.
Agradezco cualquier sugerencia.
Gracias, Momak.

Sergio Florez M.

unread,
Feb 11, 2004, 11:37:07 AM2/11/04
to
en C# se hace tal como te respondieron:
oTabla.Columns.Add("NombreColumna",typeof(String));

pero en VB es un poco distinto:
oTabla.Columns.Add("NombreColumna", Type.GetType("System.String"))


--
Sergio Florez M.
Medellín, Colombia


"momak" <aalaalal@alala.a> escribió en el mensaje
news:eBSBswL8...@TK2MSFTNGP12.phx.gbl...

momak

unread,
Feb 11, 2004, 12:26:41 PM2/11/04
to
Hola Sergio:
He cambiado el código como me has dicho pero me sigue saliendo el
siguiente error:

"
Detalles de la excepción: System.NullReferenceException: Referencia a
objeto no establecida como instancia de un objeto.

Error de código fuente:


Línea 21: Dim ds As System.Data.dataset = New
System.Data.dataset
Línea 22: dataAdapter.Fill(ds)
Línea 23:
ds.tables("tObras").columns.add("respuesta",Type.GetType("System.integer"))
Línea 24:

"

Lo único que se me ocurre es que la tabla en cuestión, no sellame
"tObras" en el dataset. He revisado el código generado por el webmatrix,
para rellenar el dataset, y en ningún sitio he visto que le diera un
nombre en el dataset a la tabla que carga, así que he supuesto que
tendría el mismo nombre que tenía en la base de datos.
Aunque no sé, quizás no tenga que ver con esto.
A ver si alguien me puede decir donde está el problema.
De nuevo gracias, Momak.

Sergio Florez M.

unread,
Feb 11, 2004, 12:28:52 PM2/11/04
to
Es posible. Si no se la ha asignado nombre por ningun lado tu tabla se llamaria "Table1". Intentalo asi.

--
Sergio Florez M.
Medellín, Colombia
 
 
"momak" <aalaalal@alala.a> escribió en el mensaje news:uNa14QM8...@TK2MSFTNGP12.phx.gbl...

momak

unread,
Feb 11, 2004, 1:09:10 PM2/11/04
to
Hola de nuevo sergio:
Con "Table1" me sigue dando el mismo error.Sin embargo he probado con
"Table" y me da otro error diferente, con lo que me parece que el
anterior queda solucionado. El error de ahora creo que tiene que ver con
cómo le indico el tipo que quiero para la nueva columna te copio el
mensaje que me sale, en el que también viene mi código a ver si ves algo
raro.

Detalles de la excepción: System.ArgumentNullException: El argumento
'dataType' no puede ser nulo. Nombre del parámetro: dataType

Error de código fuente:


Línea 21: Dim ds As System.Data.dataset = New
System.Data.dataset
Línea 22: dataAdapter.Fill(ds)
Línea 23:

ds.tables("table").columns.add("respuesta",Type.GetType("System.integer"))
Línea 24:


Muchas gracias por tu ayuda, Momak.

Por cierto mira a ver si me puedes decir también como sería en VB el
siguiente código para asignar un valor a un campo del primer registro
del datatable

oTabla.Rows[0]["NombreColumna] = "valor"

Sergio Florez M.

unread,
Feb 11, 2004, 1:50:26 PM2/11/04
to
Trata cambiando el tipo de dato. El integer no es System.Integer, es System.Int32
 
La linea me imagino que debe ser asi:
oTabla.Rows.Item(0).Columns("NombreColumna") = "valor"

--
Sergio Florez M.
Medellín, Colombia
 
 
"momak" <aalaalal@alala.a> escribió en el mensaje news:u6CTooM8...@TK2MSFTNGP12.phx.gbl...

momak

unread,
Feb 11, 2004, 2:32:06 PM2/11/04
to
Buenas Sergio:
He cambiado el tipo de dato y me vuelve a dar el mismo error que antes
, dice que el campo datatype no puede ser nulo.
He probado a pasar como parámetro únicamente el nombre de la columna
nueva . Esto lo intenté antes cuando escribía mal el nombre del
datatable, y ahora me ha funcionado. Supongo que será un tipo variant,
si es que existen en .net.
Voy a ver que consigo.
Muchísimas gracias por tu repetida ayuda.
Momak.

ONIL@

unread,
Feb 11, 2004, 9:43:16 PM2/11/04
to

Hola Momak..!
Tal vez este ejemplo te ayude un poco..

Hola Aragorn !

Puedes llenar el grid con un DataTable :


Dim dt As DataTable

Dim dr As DataRow

Dim i As Integer

'CREA EL DataTable

dt = New DataTable

'AGREGAS LAS COLUMNAS (NOMBRE,TIPO) QUE CONTENGA TU QUERY MAS UNA (LA DE LA
SUMA)

dt.Columns.Add(New DataColumn("Valor1", GetType(String)))

dt.Columns.Add(New DataColumn("Valor2.", GetType(String)))

dt.Columns.Add(New DataColumn("Suma", GetType(String)))

'CREAS LOS RENGLONES Y AGREGAS DATOS EN ESTE EJEMPLO UTILIZO
'UN LAZO PARA LLENAR 12 RENGLONES (EN TU CASO RECORRER EL DATAREADER,
ASIGNAR A CADA COLUMNA EL VALOR DE LAS COLUMNAS DEL DATAREADER Y EFECTUAR LA
SUMA)

For i = 1 To 12

dr = dt.NewRow()

'ASIGNO VALORES CUALQUIERA A LAS COLUMNAS
dr(0)=valor primera columna
dr(1) = valor segunda columna
dr(2) = suma valor primera columna+valor segunda columna

'AGREGO CADA RENGLON A LA DATATABLE
dt.Rows.Add(dr)

Next

dr = dt.NewRow()

dt.Rows.Add(dr)

DataGrid1.DataSource = new DataView(dt)

DataGrid1.DataBind

(\__/)
(=':'=)
(")_(")
ONil@.
MX.


"momak" <aalaalal@alala.a> wrote in message
news:eBSBswL8...@TK2MSFTNGP12.phx.gbl...

0 new messages