Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   .NET (http://www.forosdelweb.com/f29/)
-   -   2 sobre DataGrids (http://www.forosdelweb.com/f29/2-sobre-datagrids-160727/)

Albertron 23/10/2003 03:01

2 sobre DataGrids
 
Hola qtal,

Me gustaría saber si es posible hacer alguna de estas dos cosas:
1.- Cargar un DataGrid en "modo edición". Es decir, que en el DataGrid se muestren de entrada unos textbox con los datos recuperados por una consulta para poder modificarlos.

2.- Se puede cargar un DataGrid a partir de un vector? Es decir, la fuente de información del DataGrid sería un vector y las columnas del DataGrid se corresponderían con cada una de las posiciones del vector.

Gracias y saludos,

RootK 23/10/2003 13:07

Cita:

1.- Cargar un DataGrid en "modo edición".
Porque no lo cargas con un ItemTemplate y lo llenas con el nombre de los campos. (utilicé la BD Northwin) ;-)

Ejemplo:


<asp:DataGrid id="tabs" runat="server" Width="483px" AutoGenerateColumns="False" >
<Columns>
<asp:TemplateColumn HeaderText="Contact Name"> <ItemTemplate>
<asp:textbox ID="txtContact" Runat=server text='<%# Container.DataItem("ContactName") %> '>
</asp:textbox>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Address"> <ItemTemplate>
<asp:textbox ID="txtAddress" Runat=server text='<%# Container.DataItem("Address") %>'>
</asp:textbox>
<ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>

Y con ello cuando se carge la pagina se cargará en un textbox. :-D

Cita:

2.- Se puede cargar un DataGrid a partir de un vector?
Si es como lo pienso lo podrías hacer de ésta manera: (voy a tomer los mismos nombre para seguir con el ejemplo)


Cita:


Dim ds As DataSet

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Put user code to initialize the page here
If Not IsPostBack Then
ds = GetDS2()
tabs.DataSource = ds
tabs.DataBind()
End If

End Sub

Function GetDS2() As DataSet
Dim i As Integer
Dim arrContacts() As String
Dim arrAddress() As String

arrContacts = New String(2) {"Nombre1", "Nombre2", "Nombre3"}
arrAddress = New String(2) {"Address1", "Address2", "Address3"}

ds = New DataSet

Dim dt As New DataTable("Usuarios")
dt.Columns.Add("ContactName", GetType(String))
dt.Columns.Add("Address", GetType(String))
ds.Tables.Add(dt)

For i = 0 To 2
Dim dr As DataRow = dt.NewRow()
dr(0) = arrContacts(i).ToString
dr(1) = arrAddress(i).ToString

dt.Rows.Add(dr)
Next

Return ds

End Function

Y este DataSet se lo pasas a tu grid y tambien será visto en cuadros de texto.

Espero que te sirvan éstos ejemplos. ;-)

Saludos :adios:

Albertron 24/10/2003 04:39

Hola qtal,
Gracias por la ayuda.
Una cosa más, tengo una select que me recupera 3 campos.
Uno lo quiero poner en un checkbox y el otro en un textbox.
Y quiero que se repita n veces (tantas como registros tenga la select) por el DataGrid.
Es decir, cada fila del Datagrid tendrá un checkbox (marcado o no en función del 3er campo de mi select) y a su
lado, un textbox (con información o no en función de si el checkbox está marcado o no).
Entiendo que el montaje es un poco complicado :-)
De momento tengo la consulta, ahora me falta visualizar esa consulta en el DataGrid.
Ah! Otra duda que me surge. Es posible en un datagrid pintar la información en, por ejemplo, 3 columnas de n filas?
Por ejemplo, si la consulta me recupera 60 registros, hacer 3 columnas de 20 registros cada una
Gracias y saludos,

RootK 24/10/2003 09:00

Cita:

Y quiero que se repita n veces (tantas como registros tenga la select) por el DataGrid.
Es decir, cada fila del Datagrid tendrá un checkbox (marcado o no en función del 3er campo de mi select) y a su
lado, un textbox :ojotes:
Si me puedes explicar un poco mas lo que deseas sería mejor..

Cita:

si la consulta me recupera 60 registros, hacer 3 columnas de 20 registros cada una
Porque no haces mejor una paginación..?? sería mas presentable la información no crees..?? :pensando:

Saludos :adios:

Albertron 24/10/2003 10:41

A ver si consigo explicarme porque lo que quiero hacer creo que es un poco complicado:

Voy a suponer que sabes SQL (espero que si). Lo que quiero hacer es el mantenimiento de una relación M a N.

Imagina que tengo una tabla con modelos de coche (Audi A3, Ford Mondeo, ...) y otra con equipamientos de coches (Llantas de aleación, aire acondicionado). Lo que quiero hacer es un formulario donde pueda asignar el equipamiento a un modelo de coche.

Pasando como parámetro el modelo del coche, tengo un Datagrid, y cada fila o registro del DataGrid consta de:

- Un checkbox cuya etiqueta es el nombre del equipamiento que quiero asignar a ese modelo de coche
- Un textbox que es un campo de observaciones

El funcionamiento del formulario es el siguiente. Yo voy marcando checkboxes y añadiendo las observaciones y cuando le doy a un botón de guardar, tengo que guardar en la tabla de la relación M a N, los registros del DataGrid

Albertron 24/10/2003 10:52

A ver si consigo explicarme porque lo que quiero hacer creo que es un poco complicado:

Voy a suponer que sabes SQL (espero que si). Lo que quiero hacer es el mantenimiento de una relación M a N.

Imagina que tengo una tabla con modelos de coche (Audi A3, Ford Mondeo, ...) y otra con equipamientos de coches (Llantas de aleación, aire acondicionado). Lo que quiero hacer es un formulario donde pueda asignar el equipamiento a un modelo de coche.

Pasando como parámetro el modelo del coche, tengo un Datagrid, y cada fila o registro del DataGrid consta de:

- Un checkbox cuya etiqueta es el nombre del equipamiento que quiero asignar a ese modelo de coche
- Un textbox que es un campo de observaciones

El funcionamiento del formulario es el siguiente. Yo voy marcando checkboxes y añadiendo las observaciones y cuando le doy a un botón de guardar, tengo que guardar en la tabla de la relación M a N, los registros del DataGrid que tengan el checkbox activado.

Hasta aquí bien?

Ahora, el "problema" lo tengo cuando entro en el formulario con un modelo que ya tiene asignado algún equipamiento, porque me tiene que aparecer el checkbox del equipamiento marcado.

He intentado probando lo siguiente:

<asp:DataGrid ... OnItemDataBound="pr_activar_checks">
<columns>
<asp:TemplateColumn HeaderText="Característica">
<ItemTemplate>
<asp:CheckBox Runat=server Text='<%# Container.DataItem("caracteristica") %> '>
</asp:CheckBox>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Ubicación">
<ItemTemplate>
<asp:textbox ID="txtAddress" Runat=server text='<%# Container.DataItem("ubicacion") %>'>
</asp:textbox>
</ItemTemplate>
</asp:TemplateColumn>
</columns>
</asp:DataGrid>


La idea, lo que no se hacer y no se si se puede o no, es que desde la función que llamo con el OnItemDataBound, pueda acceder a la propiedad Text del Textbox del DataGrid y, si me recupera texto, entonces haría esto:

If (texto_que_recupero de e.Item.Cells(2) <> nulo) Then
Dim cBox as checkBox
cBox.Checked = True
e.Item.Cells(0).Controls.Add(cBox)
End If

Entiendes la idea?

Gracias y saludos

RootK 24/10/2003 12:21

Cita:

me tiene que aparecer el checkbox del equipamiento marcado
Hola... si mas o menos te entendí lo que podrías hacer es crear una funcion que regrese un valor booleano a tu checkbox dependiendo del registro, ejemplo:

Cita:

<asp:TemplateColumn HeaderText="Característica">
<ItemTemplate>
<asp:CheckBox Runat=server Text='<%# Container.DataItem("caracteristica") %> ' Checked='<%# Checar(Container.DataItem("el_campo_a_validar")) %>' >
</asp:CheckBox>
</ItemTemplate>
</asp:TemplateColumn>
y en tu código...:

Cita:

Function Checar (ByVal str As String) As Boolean

If str="" Then
Return True
Else
Return False
End If

End Function
y con ello validas el campo que recoges de tu BD y en conforme a ello va a aparecer checado o no tu ckeckbox. :arriba:


Espero te sirva. :cool:

Suerte :arriba:

Albertron 26/10/2003 05:29

ok,
probaré lo que sugieres, a ver qué tal. Una última cosa para cerrar el círculo. Es posible ir recorriendo un DataGrid registro a registro para ir insertando los valores del registro en el SQL Server?
La idea es tener un botón que al pulsarlo, llame a un procedimiento que vaya recuperando los valores del datagrid.
Luego yo, en función de si un campo está checkeado o no, haría un insert en la base de datos,
Saludos,

Albertron 27/10/2003 05:22

Hola qtal,
Ya he cerrado el círculo :arriba:
Utilizo este código en un botón externo al DataGrid para recorrer cada fila del DataGrid e ir insertando los valores en la base de datos.

Dim gridrow As DataGridItem

For Each gridrow In tabs.Items
cod_caracteristica = CType(gridrow.FindControl("cod_carac"), TextBox).Text

nom_caracteristica = CType(gridrow.FindControl("cb_carac"), CheckBox).Text

ubicacion = CType(gridrow.FindControl("ubicacion"), TextBox).Text

If ubicacion <> "" Then
' Hago la inserción
End if
Next


Gracias por la ayuda y saludos

felixini 09/01/2008 16:51

Re: 2 sobre DataGrids
 
hola! una consulta y como haces para actualizar tu datagrid desde un boton externo a este.. porque son varios campos de texto. Me sale solo para un solo campo pero no para otro de diferente id


La zona horaria es GMT -6. Ahora son las 17:20.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.