Foros del Web » Programación para mayores de 30 ;) » .NET »

2 sobre DataGrids

Estas en el tema de 2 sobre DataGrids en el foro de .NET en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 23/10/2003, 03:01
 
Fecha de Ingreso: marzo-2002
Mensajes: 188
Antigüedad: 22 años, 2 meses
Puntos: 0
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,
  #2 (permalink)  
Antiguo 23/10/2003, 13:07
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
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.

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
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #3 (permalink)  
Antiguo 24/10/2003, 04:39
 
Fecha de Ingreso: marzo-2002
Mensajes: 188
Antigüedad: 22 años, 2 meses
Puntos: 0
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,
  #4 (permalink)  
Antiguo 24/10/2003, 09:00
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
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
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..??

Saludos
  #5 (permalink)  
Antiguo 24/10/2003, 10:41
 
Fecha de Ingreso: marzo-2002
Mensajes: 188
Antigüedad: 22 años, 2 meses
Puntos: 0
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
  #6 (permalink)  
Antiguo 24/10/2003, 10:52
 
Fecha de Ingreso: marzo-2002
Mensajes: 188
Antigüedad: 22 años, 2 meses
Puntos: 0
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
  #7 (permalink)  
Antiguo 24/10/2003, 12:21
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
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.


Espero te sirva.

Suerte
  #8 (permalink)  
Antiguo 26/10/2003, 05:29
 
Fecha de Ingreso: marzo-2002
Mensajes: 188
Antigüedad: 22 años, 2 meses
Puntos: 0
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,
  #9 (permalink)  
Antiguo 27/10/2003, 05:22
 
Fecha de Ingreso: marzo-2002
Mensajes: 188
Antigüedad: 22 años, 2 meses
Puntos: 0
Hola qtal,
Ya he cerrado el círculo
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
  #10 (permalink)  
Antiguo 09/01/2008, 16:51
 
Fecha de Ingreso: enero-2008
Mensajes: 10
Antigüedad: 16 años, 3 meses
Puntos: 0
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
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:39.