Ver Mensaje Individual
  #4 (permalink)  
Antiguo 04/06/2007, 11:52
Avatar de Yaraher
Yaraher
 
Fecha de Ingreso: abril-2007
Ubicación: Lima, Perú
Mensajes: 262
Antigüedad: 17 años, 1 mes
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!