DataGridView en un control de usuario

23/01/2009 - 07:39 por pvergara | Informe spam
Hola a todos/as.

¿Cómo solucionáis vosotros el tema de usar datagridview en un
usercontrol?... ahora voy y me explico:

Con la filosofía de "reaprovechamiento" del diseño, creo un
UserControl para facilitar la tarea añadir filtros simples a mis
proyectos... por lo tanto, añado un label, un textbox y un botón a la
zona superior, y a la inferior un datagridview...exponiendo mediante
propiedades públicas el "Columns" del datagridview... bueno, cual es
mi sorpresa que cuando voy a utilizar la propiedad columns de mi UC me
encuentro que el CollectionEditor que utiliza por defecto un
datagridview enlazado a un bindingsource... no lo puedo utilizar... y
es ahí donde surge mi duda...¿existe alguna forma de poder utilizarlo?
o ¿el uso de un datagridview dentro de un usercontrol... ayuda por un
lado... pero entorpece por otro? (porque claro... a ver cómo vendo yo
la ventaja de usar un UC... con el inconveniente de tener que añadir
los colums uno a uno por código).


Un saludo.

Preguntas similare

Leer las respuestas

#1 pvergara
25/01/2009 - 12:26 | Informe spam
Aquí hay dos posibilidades por las cuales no responde nadie:
Una porque es demasiado trivial que pensáis que es fácil encontrarlo
en internet
Porque es demasiado complejo que no muchos saben como hacerlo.

Sinceramente me gustaría pensar que es la primera opción... pero por
desgracia de los muchos años que llevo en la informática he aprendido
a buscar realmente bien y me he dado cuenta el problema que planteo
simple... lo que se dice simple no es... por lo tanto creo que me
tengo que decantar por la segunda opción... y empezar a plantearme que
en el foro... se responden temas muy triviales... pero si nos vamos a
lo complejo quizás no haya tanta suerte, una pena.

Aun así os(ME) responderé yo mismo al problema planteado con una
posible solución... que no es la ideal, pero si la mejor que se me
ocurrió... y si le apetece a alguien... que indique si a él se le
ocurrió otra... o si hay mejoras por encima de la mía:

a) Crear el UserControl y añadir los controles que se deseen (en mi
caso eran un label, un textbox, un button, y un datagridview)... Y UN
COMPONENTE BindingSource... que se enlaza automáticamente en el
constructor del UC con el DataSource del DataGridView.
b) Exponer (hacer publicos o protegidos o progegidos internal...
según el caso) las propiedades y los eventos que se deseen entre otros
(y aquí viene lo importante):
* BindingSource (Lectura/Escritura -get y set-)
* DataGridViewColumnCollection (Solo lectura...aunque ésto no nos
impedirá añadir columnas... al fin y al cabo devolvemos una
referencia :-) )
c) Dado que hemos perdido la capacidad de trabajar con el diseñador
directamente (una put...que parece ser que tiene que ver con la forma
en la que se desarrolló el CollectionEditor de la adición de las
columnas)... creamos un método privado al que, por ejemplo, llamaremos
"InitializeComponentNoDesign" con las siguientes características:
c.1) Se invocará en el constructor justo después del
"InitializeComponent"
c.2) Se utilizará para crear los datagridviewcolumn de los tipos
que se deseen, añadirlos a la grid mediante el uso del método AddRange
de la propiedad "colums" expuesta por el UC y formatearlos como se
deseen (lo mismo que haría el diseñador... pero "a mano").
d) En el constructor, justo después de la invocación del método
recién creado, podemos asignar el bindingsource a un datasource que,
por supuesto, cuente, como mínimo, con las mismas propiedades
indicadas en las columnas.

Estoy abierto a sugerencias.

On 23 ene, 07:39, pvergara wrote:
Hola a todos/as.

  ¿Cómo solucionáis vosotros el tema de usar datagridview en un
usercontrol?... ahora voy y me explico:

  Con la filosofía de "reaprovechamiento" del diseño, creo un
UserControl para facilitar la tarea añadir filtros simples a mis
proyectos... por lo tanto, añado un label, un textbox y un botón a la
zona superior, y a la inferior un datagridview...exponiendo mediante
propiedades públicas el "Columns" del datagridview... bueno, cual es
mi sorpresa que cuando voy a utilizar la propiedad columns de mi UC me
encuentro que el CollectionEditor que utiliza por defecto un
datagridview enlazado a un bindingsource... no lo puedo utilizar... y
es ahí donde surge mi duda...¿existe alguna forma de poder utilizarlo?
o ¿el uso de un datagridview dentro de un usercontrol... ayuda por un
lado... pero entorpece por otro? (porque claro... a ver cómo vendo yo
la ventaja de usar un UC... con el inconveniente de tener que añadir
los colums uno a uno por código).

Un saludo.
Respuesta Responder a este mensaje
#2 Jose TH
25/01/2009 - 13:07 | Informe spam
Aquí hay dos posibilidades por las cuales no responde nadie:
Una porque es demasiado trivial que pensáis que es fácil encontrarlo
en internet
Porque es demasiado complejo que no muchos saben como hacerlo.

Sinceramente me gustaría pensar que es la primera opción... pero por
desgracia de los muchos años que llevo en la informática he aprendido
a buscar realmente bien y me he dado cuenta el problema que planteo
simple... lo que se dice simple no es... por lo tanto creo que me
tengo que decantar por la segunda opción... y empezar a plantearme que
en el foro... se responden temas muy triviales... pero si nos vamos a
lo complejo quizás no haya tanta suerte, una pena.




Leyendo entre líneas su crítica algo desacertada a este foro me pregunto si
es que usted piensa que el foro está a su servicio o por lo menos usted está
pagando para que le respondan.
O en otro caso supone que la gente está obligada a responderle sus
inquietudes "no triviales".

Está muy equivocado. Aquí debemos agradecer el gran favor que nos hacen de
ayudarnos gratuita y desinteresadamente, a la resolución de nuestros
problemas, sean triviales o no. Pero entienda que nadie está obligado a
saberlo todo y, aunque lo supiera, tampoco nadie está obligado a
responderlo todo, a menos, le repito, que usted esté pagando por el
servicio, y no lo sepamos.

Jose TH
Respuesta Responder a este mensaje
#3 pvergara
25/01/2009 - 13:28 | Informe spam
Lamento enormemente que se haya entendido mi respuesta como el inicio
de un Flamewar.

Me temo que no nos conocemos lo sufiente como para prejuzgar pero si
te diré que estuve participando muy activamente en un foro de PHP en
el que respuesta ""complicada"" que venía post en el que participaba.

Tienes toda la razón que el foro se responde de forma desinteresada y
gratuía... de hecho voy mas allá... quizás alguno de esos de pago no
sepan responder a todo... tampoco.

Lo único que quiero decir es que, efectivamente es más fácil
participar o ayudar a los demás cuando las respuestas son fáciles
(llevo cuatro preguntas de las cuales dos de ellas han sido
respondidas rápidamente -Gracias de nuevo Alberto Población-) que
cuando son complejas (UserControl+DataGridView o "Dudilla con
Linq")... pero quizás repito QUIZÁS... sea mas interesante un foro en
el que expertos que me consta que responden también en él... nos
ayuden a los mas novatos en cuestiones que nos ayuden a todos... de
hecho... con ánimo de ayudar en la medida de lo posible... a la
pregunta que yo hice... yo mismo respondí... y así pretendo, de alguna
forma, fomentar el debate (en este caso debatir sobre las supuestas
ventajas de los usercontrol... cuando tienes que utilizar controles
mas "complejos")...¿quizás lo hecho de forma demasiado polémica?... lo
siento repito si he molestado a alguien no era mi intención.


Bueno dicho esto espero seguir participando en el foro... ya sea para
preguntar ya sea para responder.

Un saludo.
On 25 ene, 13:07, "Jose TH" <>>> wrote:
>Aquí hay dos posibilidades por las cuales no responde nadie:
>  Una porque es demasiado trivial que pensáis que es fácil encontrarlo
>en internet
>  Porque es demasiado complejo que no muchos saben como hacerlo.

>Sinceramente me gustaría pensar que es la primera opción... pero por
>desgracia de los muchos años que llevo en la informática he aprendido
>a buscar realmente bien y me he dado cuenta el problema que planteo
>simple... lo que se dice simple no es... por lo tanto creo que me
>tengo que decantar por la segunda opción... y empezar a plantearme que
>en el foro... se responden temas muy triviales... pero si nos vamos a
>lo complejo quizás no haya tanta suerte, una pena.

Leyendo entre líneas su crítica algo desacertada a este foro me pregunto si
es que usted piensa que el foro está a su servicio o por lo menos usted está
pagando para que le respondan.
O en otro caso supone que la gente está obligada a responderle sus
inquietudes "no triviales".

Está muy equivocado.  Aquí debemos agradecer el gran favor que nos hacen de
ayudarnos gratuita y desinteresadamente, a la resolución de nuestros
problemas, sean triviales o no. Pero entienda que nadie está obligado a
saberlo todo y, aunque lo supiera,  tampoco nadie está obligado a
responderlo todo, a menos, le repito, que usted esté pagando por el
servicio, y no lo sepamos.

Jose TH
Respuesta Responder a este mensaje
#4 Jose TH
25/01/2009 - 14:22 | Informe spam
Si es para lo que me imagino, otra opción que tienes es no usar un
UserControl sino simplemente heredar directamente de DataGridView y que sea
el propio DataGridView, en su constructor, que cree automáticamente los
demás controles fijos, es decir su label, su textbox y su button. Creo que
debe ser más simple así.
Así podrás editar directamente las columnas del dgv en el designer.


Jose TH



"pvergara" escribió en el mensaje
news:
Aquí hay dos posibilidades por las cuales no responde nadie:
Una porque es demasiado trivial que pensáis que es fácil encontrarlo
en internet
Porque es demasiado complejo que no muchos saben como hacerlo.

Sinceramente me gustaría pensar que es la primera opción... pero por
desgracia de los muchos años que llevo en la informática he aprendido
a buscar realmente bien y me he dado cuenta el problema que planteo
simple... lo que se dice simple no es... por lo tanto creo que me
tengo que decantar por la segunda opción... y empezar a plantearme que
en el foro... se responden temas muy triviales... pero si nos vamos a
lo complejo quizás no haya tanta suerte, una pena.

Aun así os(ME) responderé yo mismo al problema planteado con una
posible solución... que no es la ideal, pero si la mejor que se me
ocurrió... y si le apetece a alguien... que indique si a él se le
ocurrió otra... o si hay mejoras por encima de la mía:

a) Crear el UserControl y añadir los controles que se deseen (en mi
caso eran un label, un textbox, un button, y un datagridview)... Y UN
COMPONENTE BindingSource... que se enlaza automáticamente en el
constructor del UC con el DataSource del DataGridView.
b) Exponer (hacer publicos o protegidos o progegidos internal...
según el caso) las propiedades y los eventos que se deseen entre otros
(y aquí viene lo importante):
* BindingSource (Lectura/Escritura -get y set-)
* DataGridViewColumnCollection (Solo lectura...aunque ésto no nos
impedirá añadir columnas... al fin y al cabo devolvemos una
referencia :-) )
c) Dado que hemos perdido la capacidad de trabajar con el diseñador
directamente (una put...que parece ser que tiene que ver con la forma
en la que se desarrolló el CollectionEditor de la adición de las
columnas)... creamos un método privado al que, por ejemplo, llamaremos
"InitializeComponentNoDesign" con las siguientes características:
c.1) Se invocará en el constructor justo después del
"InitializeComponent"
c.2) Se utilizará para crear los datagridviewcolumn de los tipos
que se deseen, añadirlos a la grid mediante el uso del método AddRange
de la propiedad "colums" expuesta por el UC y formatearlos como se
deseen (lo mismo que haría el diseñador... pero "a mano").
d) En el constructor, justo después de la invocación del método
recién creado, podemos asignar el bindingsource a un datasource que,
por supuesto, cuente, como mínimo, con las mismas propiedades
indicadas en las columnas.

Estoy abierto a sugerencias.

On 23 ene, 07:39, pvergara wrote:
Hola a todos/as.

¿Cómo solucionáis vosotros el tema de usar datagridview en un
usercontrol?... ahora voy y me explico:

Con la filosofía de "reaprovechamiento" del diseño, creo un
UserControl para facilitar la tarea añadir filtros simples a mis
proyectos... por lo tanto, añado un label, un textbox y un botón a la
zona superior, y a la inferior un datagridview...exponiendo mediante
propiedades públicas el "Columns" del datagridview... bueno, cual es
mi sorpresa que cuando voy a utilizar la propiedad columns de mi UC me
encuentro que el CollectionEditor que utiliza por defecto un
datagridview enlazado a un bindingsource... no lo puedo utilizar... y
es ahí donde surge mi duda...¿existe alguna forma de poder utilizarlo?
o ¿el uso de un datagridview dentro de un usercontrol... ayuda por un
lado... pero entorpece por otro? (porque claro... a ver cómo vendo yo
la ventaja de usar un UC... con el inconveniente de tener que añadir
los colums uno a uno por código).

Un saludo.
Respuesta Responder a este mensaje
#5 Jose TH
25/01/2009 - 14:23 | Informe spam
Bueno, de lo que escribiste ésa fue la impresión que dio. Pero, no
problem, todo el mundo es bienvenido a colaborar en cualquier foro, sin más
pretensiones de la cuenta ya que esto es un foro público y gratuito.


"pvergara" escribió en el mensaje
news:
Lamento enormemente que se haya entendido mi respuesta como el inicio
de un Flamewar.

Me temo que no nos conocemos lo sufiente como para prejuzgar pero si
te diré que estuve participando muy activamente en un foro de PHP en
el que respuesta ""complicada"" que venía post en el que participaba.

Tienes toda la razón que el foro se responde de forma desinteresada y
gratuía... de hecho voy mas allá... quizás alguno de esos de pago no
sepan responder a todo... tampoco.

Lo único que quiero decir es que, efectivamente es más fácil
participar o ayudar a los demás cuando las respuestas son fáciles
(llevo cuatro preguntas de las cuales dos de ellas han sido
respondidas rápidamente -Gracias de nuevo Alberto Población-) que
cuando son complejas (UserControl+DataGridView o "Dudilla con
Linq")... pero quizás repito QUIZÁS... sea mas interesante un foro en
el que expertos que me consta que responden también en él... nos
ayuden a los mas novatos en cuestiones que nos ayuden a todos... de
hecho... con ánimo de ayudar en la medida de lo posible... a la
pregunta que yo hice... yo mismo respondí... y así pretendo, de alguna
forma, fomentar el debate (en este caso debatir sobre las supuestas
ventajas de los usercontrol... cuando tienes que utilizar controles
mas "complejos")...¿quizás lo hecho de forma demasiado polémica?... lo
siento repito si he molestado a alguien no era mi intención.


Bueno dicho esto espero seguir participando en el foro... ya sea para
preguntar ya sea para responder.

Un saludo.
On 25 ene, 13:07, "Jose TH" <>>> wrote:
>Aquí hay dos posibilidades por las cuales no responde nadie:
> Una porque es demasiado trivial que pensáis que es fácil encontrarlo
>en internet
> Porque es demasiado complejo que no muchos saben como hacerlo.

>Sinceramente me gustaría pensar que es la primera opción... pero por
>desgracia de los muchos años que llevo en la informática he aprendido
>a buscar realmente bien y me he dado cuenta el problema que planteo
>simple... lo que se dice simple no es... por lo tanto creo que me
>tengo que decantar por la segunda opción... y empezar a plantearme que
>en el foro... se responden temas muy triviales... pero si nos vamos a
>lo complejo quizás no haya tanta suerte, una pena.

Leyendo entre líneas su crítica algo desacertada a este foro me pregunto
si
es que usted piensa que el foro está a su servicio o por lo menos usted
está
pagando para que le respondan.
O en otro caso supone que la gente está obligada a responderle sus
inquietudes "no triviales".

Está muy equivocado. Aquí debemos agradecer el gran favor que nos hacen de
ayudarnos gratuita y desinteresadamente, a la resolución de nuestros
problemas, sean triviales o no. Pero entienda que nadie está obligado a
saberlo todo y, aunque lo supiera, tampoco nadie está obligado a
responderlo todo, a menos, le repito, que usted esté pagando por el
servicio, y no lo sepamos.

Jose TH
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida