Pregunta

Tengo una rejilla DevExpress (DevExpress.XtraGrid.GridControl 8,2) con una fuente de datos establecido en tiempo de ejecución, así:

private DataContext db = new DataContext("connection string");
gridControl.DataSource = from t in db.sometable
                          select new
                          {
                              Field1 = t.Name,
                              Field2 = t.Email,
                              Field3 = t.City
                          };

Esto significa que la vista no tiene idea de lo que los datos se va a ver como en tiempo de diseño. Me gusta ser capaz de establecer una consulta LINQ como el origen de datos, pero también me gustaría especificar lo que la vista se verá como en tiempo de diseño.

  • ¿Hay una manera que puedo decirle a la opinión de que se va a utilizar esta consulta?
  • ¿La mejor solución es crear un objeto pequeño para la celebración de la contenido de lo que se regresar de esta consulta?
¿Fue útil?

Solución

Se tendrá que definir una clase para el tipo de retorno de la consulta LINQ si desea que la red de DevExpress para que conteste automáticamente las columnas del origen de datos. En tiempo de diseño, el motor de enlace WinForm está utilizando reflexión o ICustomTypeDescriptor si la fuente se implementa para descubrir automáticamente las propiedades, sus tipos, etc de la fuente de datos. La rejilla DevExpress está utilizando este mecanismo de unión subyacente y la generación automática de las columnas para que en tiempo de diseño basado en la información de propiedad. En su caso, sin embargo, se está creando un tipo anónimo en su consulta LINQ que no se conoce o está disponible en tiempo de diseño. Por lo tanto, DevExress cuadrícula no puede generar automáticamente las columnas. Como se ha mencionado @Dennis, puede agregar manualmente las columnas a la red en el diseñador. Es necesario asegurarse de que 'NombreCampo', creo, en la columna coincide con el nombre de la propiedad de su fuente de datos.

Si vas con una clase, es posible que también desee aplicar INotifyPropertyChanged para hacer la rejilla al tanto de los cambios de datos en la fuente de datos.

Otros consejos

IIRC, la xtragrid requiere que la fuente de datos implementar una interfaz de enlace de datos (es decir IBindingList (T)) para que se auto-generar columnas y los artículos deben aplicar INotifyPropertyChanged.

Con esto en mente: si lo hace crear columnas a través del asistente en tiempo de diseño o en el código en tiempo de ejecución, siempre y cuando se establece la propiedad NombreCampo de las columnas, se mostrarán los datos de la fuente de datos con una propiedad de ese nombre.

Notas:

  • Creo que debe ser una propiedad, auto o no, como me he dado cuenta que a veces no se unirá a las variables públicas.
  • La propiedad debe ser asignado algo (por defecto o de otro tipo).
  • Debe haber un constructor sin parámetros para el elemento.

Los campos son conocidos en tiempo de diseño (Campo1, Campo2, Field3).

De acuerdo con DevExpress puede utilizar IList, IListSource, ITypedList o IBindingList. La diferencia entre ellos es si se puede añadir nuevas filas o si los cambios son REFIN el control.

Así que usted puede utilizar ToList ():

private DataContext db = new DataContext("connection string");
gridControl.DataSource = (from t in db.sometable
                         select new
                         {
                             Field1 = t.Name,
                             Field2 = t.Email,
                             Field3 = t.City
                         }).ToList();

Nota: : he comprobado usando DevExpress 10.1, pero si se usa el WinForms vinculante, entonces debería funcionar de acuerdo con la MSDN .

No he trabajado con la red DevExpress, pero he hecho mucho con el DataGridView NET.

¿La rejilla DevExpress tiene la misma funcionalidad que el DataGridView NET que genera automáticamente columnas?

Si es así, entonces debería exhibir lo que los campos se encuentran en su consulta y utilizará Campo1, Campo2 y Campo3 (a partir de su código de ejemplo) como nombres de columna.

O simplemente apagar el auto generar característica columna y agregar las columnas en tiempo de diseño. Mientras que coincidan con lo que su consulta devuelve que debería funcionar bien.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top