2012-04-22 46 views
13

Puedo vincular directamente mi control DataGridView a una lista de enlaces de mis objetos comerciales configurando la propiedad DataSource. Mi objeto de negocio implementa INotifyPropertyChanged, por lo que la DGV se actualiza cuando se agrega un nuevo elemento a la lista de enlaces o se actualiza uno existente.¿Cuáles son los beneficios de usar un bindingsource con bindinglist <business obj> como fuente de datos?

Con respecto al tratamiento de registros individuales, puedo vincular mi objeto comercial a cuadros de texto y otros controles relevantes.

también puede derivar de BindingList y crear una clase CustomBindingList para poner en práctica los métodos necesarios de IBindable, como se explica en el siguiente enlace: http://msdn.microsoft.com/en-us/library/aa480736.aspx

personas Alternativamente, he visto recomiendan utilizar un BindingSource. El origen de datos de BindingSource es el objeto comercial y el DataSource de DGV es el BindingSource.

En cualquier caso, basándola en una BindingSource no me ofrece:

  1. de filtrado (filtro no funciona). La implementación debe ser proporcionada por mí.
  2. Ordenar y buscar no funciona. La implementación debe ser proporcionada por mí.

Entonces, ¿por qué se recomienda el enfoque BindingSource?

Imagen más amplia: Soy nuevo en los conceptos de OOPS y C#. Trabajando con aplicaciones de bases de datos. Winforms. Hasta ahora solo se ha usado el enfoque DataSet/DataTable. Ahora trato de crear y usar mis propias clases personalizadas.

Generalmente tienen forma de Máster/Detalle. Cuando hago clic en una fila de Detalle en el DGV, quiero editar ese registro en una ventana separada. De modo que necesito controlar el elemento de la lista representado por esa fila en el DGV. Tratar de encontrar una solución para eso me ha llevado a este punto y esta duda.

Dado lo que quiero hacer, ¿qué enfoque es mejor y por qué?

Algunos consejos aquí realmente serían útiles ya que soy muy nuevo en esto.

+0

Posible duplicado de [C# DataGridView.DataSource diferencia entre el uso de BindingSource y no] (http://stackoverflow.com/questions/4433281/c-sharp-datagridview-datasource-difference-between-using-bindingsource-and-not) –

Respuesta

1

Se recomienda utilizar un BindingSource cuando varios controles en el formulario utilizan la misma fuente de datos (Behind the Scenes: Improvements to Windows Forms Data Binding)

en tiempo de diseño: Personalmente encuentro BindingSource muy útil al momento de elegir las propiedades de mi objeto de negocio cuando enlace de datos a controles.

Para obtener un control para la fila actualmente seleccionada, intente bindingSource1.Current como MyBusinessObject;

En cuanto a filtrado y búsqueda: utilizo un dll de terceros para las cuadrículas que tienen implementado. Así que no puedo ayudarte con eso, lo siento.

Cuando se trabaja con listas de diferentes tipos de objetos de negocio, no utilice la lista directamente

List<IAnimal> animals = new List<IAnimal>(); 
animals.Add(new Cat()); 
animals.Add(new Dog()); 
bindingSource1.DataSource = animals; 

usar en su lugar un BindingList así:

bindingSource1.DataSource = new BindingList<IAnimal>(animals); 

que se asegurará de todos los accesos los objetos en la lista son de tipo IAnimal y le ahorra algunas excepciones.

0

La unión a una fuente de datos podría dar beneficios cuando se trata de un gran conjunto sólo una parte de los cuales obtiene representada. Por ejemplo, si mira Telerik ListView aquí http://www.telerik.com/help/winforms/listview-databinding.html (hay muchos de estos paquetes de componentes, este es el más reciente del que estoy usando partes y piezas).

La vista es muy ligero y le permite a su posición de desplazamiento a determinar qué objetos deben ser visualizado en realidad. Entonces, si solo miras los primeros 10 objetos y nunca te desplazas hacia abajo, solo 10 quedan atados y se muestran. Esto potencialmente evita una gran cantidad de acceso a datos innecesarios.

Sus funciones GridView de la misma manera. Está la parte mostrada de la grilla que está separada de la rejilla subyacente potencialmente grande.

Como beneficio adicional, se obtiene el filtrado, clasificación, agrupación.

-2

Por lo que sé, si está trabajando con una base de datos, se utiliza una BindingSource en el medio para establecer un puente bilateral entre la base de datos y su control. De lo contrario puede simplemente usar bindingList como fuente para su control.

Cuestiones relacionadas