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

Desconsertado...........con los DataGridView

Estas en el tema de Desconsertado...........con los DataGridView en el foro de .NET en Foros del Web. hola, amigos tengo insertidumbre con respecto a a mis pasos a seguir, ya que tengo que generar un DataGridView dinamicamente, pero no tengo la mas ...
  #1 (permalink)  
Antiguo 04/06/2007, 09:48
 
Fecha de Ingreso: marzo-2006
Mensajes: 202
Antigüedad: 18 años, 1 mes
Puntos: 2
Desconsertado...........con los DataGridView

hola, amigos tengo insertidumbre con respecto a a mis pasos a seguir, ya que tengo que generar un DataGridView dinamicamente, pero no tengo la mas minima idea de como hacerlo en forma dinamica,ya que normalmente los enlazo a datso y se genera solo, ustedes se preguntaran porque, la razon es la siguiente, tengo que dibujar un bus, si un BUS de los mismos que se usan para transportar pasajeros, la idea es poner dentro de las celdas los numeros de los respectivos asientos idealmente el DataGridView deberia tener 5 filas y y alrededor de 12 columnas simulando la fila de en medio como el pasillo del bus(por ende deberia ir vacia) mirando el bus de manera horizontal, mi problema es si el DataGridView sera el control adecuado para dar solucion a un problema como este o sera otro tipo de control
ALGUNA SUGERENCIA........
  #2 (permalink)  
Antiguo 04/06/2007, 11:09
Avatar de Yaraher  
Fecha de Ingreso: abril-2007
Ubicación: Lima, Perú
Mensajes: 262
Antigüedad: 17 años
Puntos: 9
Re: Desconsertado...........con los DataGridView

Mi consejo es que no uses una grilla. Hace poco tuve que hacer un sistema similar, donde se tenian que ver los asientos.

Lo que hice fue realizar un control personalizado, donde creaba controles Labels por cada asiento, y los dibujaba en la pantalla (es bastante sencillo, simplemente creas un arreglo de éstos, los inicializas, y con un foreach los dibujas en la posición X e Y que se te vea conveniente para darle la forma de carro).

Luego simplemente enlazas algún valor que requieras, como el id del asiento o lo que utilices, a su propiedad Tag. Así, estos controles recibirían esa información de cada DataRow del DataSet que obtengas de tu clase de Lógica de Negocio.

Finalmente, les agregas un evento Click común para todas, para que se reserve el asiento o la tarea que requieras, diferenciándoles con la infomación que creas conveniente.

Es un enfoque más fácil de utilizar que forzar un Grid. Al inicio tal vez te demores más en ver la mejor manera de posicionarlos, pero el resultado se verá muy bien, y tendrás mayor control sobre éste.

Cualquier duda, ojala pueda ayudarte.
Saludos!
  #3 (permalink)  
Antiguo 04/06/2007, 11:23
 
Fecha de Ingreso: marzo-2006
Mensajes: 202
Antigüedad: 18 años, 1 mes
Puntos: 2
Re: Desconsertado...........con los DataGridView

men me podrias ayudar un poco mas, sabes encontre un codigo y lo modifique para poder crear un grid similar lo que queria pero me encotre con ciertas limitaciones como dejar la fila de enmedio para simular el pasillo y que los buses tienen distitas configuraciones con respecto al lado con el que parten inicializados los numeros ejemplo lado del asiento 1 es derecho o el lado izquierzo??? cosas como eso me hacen dudar de seguirme cabesiando con el grid podrias ayudarme un poco mas con el ejemplo que me señalaste ???? este es el codigo del grid:

Public Class Form1

Private _MiDGV As New DataGridView 'Nuestro DataGrid
'Construir el aspecto de nuestro DataGrid
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
_MiDGV.Dock = DockStyle.Fill 'Acoplar al form
' _MiDGV.Enabled = False 'Impedir la edicion
_MiDGV.AllowUserToAddRows = False 'Sin opcion añadir filas
_MiDGV.RowHeadersVisible = False 'ocultar cabecera de las filas
_MiDGV.ColumnHeadersVisible = False 'ocultar cabecera de las columnas
'Dimensionar el ancho automaticamente

_MiDGV.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
Me.Controls.Add(_MiDGV) 'Añadir el Grid al form
Me.OrdenN(5, 12) 'Empezar con un orden 3*3

End Sub
'Crear un Grid de dimension f(ilas) c(columnas)
Private Sub OrdenN(ByVal f As Integer, ByVal c As Integer)
Me._MiDGV.Rows.Clear() 'Eliminar todas las filas
_MiDGV.ColumnCount = c 'Dimensionar el numero de columnas
Me._MiDGV.Rows.Add(f) 'Dimensionar el numero de filas
Dim Numerar As Integer = 0 'Numerar el contenido de las celdas
For Each col As DataGridViewColumn In Me._MiDGV.Columns
For Each row As DataGridViewRow In Me._MiDGV.Rows
Numerar = Numerar + 1
row.Cells(col.Index).Value = Numerar.ToString
Next
Next
End Sub
End Class
  #4 (permalink)  
Antiguo 04/06/2007, 11:52
Avatar de Yaraher  
Fecha de Ingreso: abril-2007
Ubicación: Lima, Perú
Mensajes: 262
Antigüedad: 17 años
Puntos: 9
Re: Desconsertado...........con los DataGridView

A ver, básicamente la idea es explotar el concepto que estamos trabajando con un lenguaje orientado a objetos, y todo control que utilizamos es un objeto.

Al tener eso claro, podemos empezar a jugar ;)

No tengo el código a la mano, pero te puedo explicar más o menos la idea general.

Digamos que queremos llenar el bus con "asientos" de forma horizontal. Definamos un asiento como representado por un cuadrado de 20x20 píxeles.
¿Qué control tenemos actualmente que nos permitiría simular esto (sin necesidad de dibujar cuadrados que sería otra opción pero tal vez un poco más compleja)?. Yo recomendaría utilizar un Label o tal vez un Botón. Ambos pueden tener un color, forma plana y eventos de click, selección y demás asociados.

Elijamos, como ejemplo, usar un Botón. Tenemos que crear un arreglo de botones (es igual a definir una arreglo de cualquier objeto), que se llame, por decir, coleccionAsientos.

Cuando se inicia tu formulario, utilizas un foreach sobre el arreglo para inicializar cada uno de los objetos que lo componen. Así, ya tienes listos para ser utilizados una serie de botones. Pero todavía no se verán en el formulario ni tienen un lugar ni forma definidos; ese es el siguiente paso.

Para esto, puedes revisar el método InitializeComponents() de tu formulario para que veas como se le asignan las propiedades a los controles que colocas manualmente. Para facilitarte el trabajo, crea un botón, aplícales las propiedades necesarias para que se vean como quieres, y luego revisa que código se ha generado para esto en el método que menciono.

Cuando tengas ese código, puedes copiarlo y dejarlo en una programa de textos (Notepad, por ejemplo), lo usaremos pronto. Luego puedes borrar el botón que creaste manualmente.

Luego de esto, crea un método que se ejecute luego de InitializeComponents(). En este método, utiliza otro foreach de nuevo sobre la colección, y utiliza el código que copiaste antes. Simplemente reemplaza el nombre del objeto por aquel que utilizas en el foreach.

De todas las propiedades, puedes dejar todas iguales, salvo el nombre (puedes concatenar algúna variable contador, como control.name ="asiento" + x) y la posición.

Acá tienes que pensar algo como quieres dibujar los controles y es un ejercicio básico para pensarlo y estoy seguro podrás encontrar la respuesta.
Básicamente, si cada uno de los cuadros ocupa un espacio de 20x20, puedes posicionar cada uno en:

La posición X = contador*ANCHO+ESPACIADO.

Eso logrará que, el primer control (variable contador con valor 0), lo posicionará en el punto 10 (0*20 + 10; estamos estimando un valor espaciado de 10 píxeles. Usa el valor que prefieras).

Así, todos los asientos se colocarán de forma horizontal en una fila, separados cada uno por 10 píxeles.

Si quiere establecer filas de 5 o algún número de asientos, en lugar de utilizar un foreach, podrías utilizar "for"s anidados que, de 5 en 5, coloquen la posición, variando también ahora la posición Y.

Es un poco complicado de explicarlo, pero si haces el ejercicio de ponerlos horizontalmente, podrás resolver la mejor forma de colocarlos.

Finalmente, puedes crear un panel o un contenedor que albergue estos botones. Para agregarlos a éste, simplemente usas la instrucción:

panel.Add(control); <-- por cada control que tengas.

Ya estamos en casi el punto final, que es añadir el panel a tu formulario, igual, con this.Add(panel). Puedes también modificar la posición del panel y ubicarlo donde prefieras usando las ideas anteriores.

Y el tema de enlazarlos con tu DataSet o DataTable, es cuestión de como manejes eso. Normalmente sería recorrer el arreglo, algo como

foreach(Button control in coleccionAsientos) {
control.tag = fila["id"];
}

asignándole a cada control el valor de cada fila de tu DataSet.

No es tan complicado como parece, trata de avanzar paso a paso para que vayas entendiendo como va la idea.

Suerte!
  #5 (permalink)  
Antiguo 04/06/2007, 12:29
 
Fecha de Ingreso: marzo-2006
Mensajes: 202
Antigüedad: 18 años, 1 mes
Puntos: 2
Re: Desconsertado...........con los DataGridView

mmmm gracias men nuevamente, aunque un poquito de codigo de como se maneja esto ubiese sido de gran ayuda ya que no me manejo mucho a nivel de crear metodos o trabajar con las clases de los objetos pero en fin... seguire tus consejos y ire postiando mis dudas e inquietudes....
GRACIAS...
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 10:01.