Frage

Ich habe ein DevExpress Gitter (DevExpress.XtraGrid.GridControl 8.2) mit einer Datenquelle zur Laufzeit wie so festgelegt:

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
                          };

Das bedeutet, dass die Ansicht keine Ahnung hat, was die Daten wie Zeit bei Design aussehen wird. Ich mag in der Lage, eine LINQ-Abfrage als Datenquelle zu setzen, aber ich mag auch angeben, was die Ansicht wie zur Design-Zeit aussehen wird.

  • Gibt es eine Möglichkeit, dass ich die Ansicht sagen kann, dass es diese Abfrage verwenden?
  • wäre die beste Lösung sein, ein kleines Objekt zu erstellen, die für das Halten Inhalt dessen, was von zurückgegeben wird diese Abfrage?
War es hilfreich?

Lösung

In Kürze erhalten Sie haben eine Klasse für den Rückgabetyp Ihrer LINQ-Abfrage definieren, ob Sie die DevExpress Raster wollen die Spalten für die Datenquelle automatisch abholen. Zur Design-Zeit wird mit der WinForm Bindungsmodul Reflexion oder ICustomTypeDescriptor, wenn die Quelle es implementiert automatisch die Eigenschaften zu entdecken, deren Typen, usw. von der Datenquelle. Das DevExpress Gitter wird mit diesem Bindungsmechanismus zugrunde liegen und automatisch die Spalten für Sie zur Entwurfszeit auf der Grundlage der Eigenschaftsinformationen zu erzeugen. aber in Ihrem Fall sind Sie einen anonymen Typen in Ihrer LINQ-Abfrage zu schaffen, das nicht bekannt ist oder zur Entwurfszeit verfügbar. Daher erzeugen DevExress Grid kann nicht die Spalten automatisch. Wie @ Dennis erwähnt, können Sie manuell Spalten an das Netz in Designer hinzufügen. Sie müssen sicherstellen, dass ‚Feldname‘, glaube ich, auf die Spalte den Namen der Eigenschaft auf die Datenquelle übereinstimmt.

Wenn Sie mit einer Klasse gehen, Sie können auch INotifyPropertyChanged implementieren das Raster bewusst von Datenänderungen in der Datenquelle zu machen.

Andere Tipps

IIRC erfordert die XtraGrid, dass die Datenquelle eine Datenbindung Schnittstelle (dh IBindingList (T)) für sie implementieren, um Spalten automatisch generieren und die Einzelteile sollten INotifyPropertyChanged implementieren.

In diesem Sinne: Wenn Sie Spalten tun erstellen über den Assistenten zur Entwurfszeit oder im Code zur Laufzeit, solange Sie die Eigenschaft Fieldname der Spalten gesetzt ist, wird sie die Daten aus der Datenquelle mit einer Eigenschaft, die zeigen, Name.

Weitere Informationen:

  • Ich denke, es muss eine Eigenschaft, Auto oder auch nicht, wie ich gefunden habe, dass es manchmal nicht zu öffentlichen Variablen binden wird.
  • Die Eigenschaft muss etwas (Standard oder auf andere Weise) zugewiesen werden.
  • Es muss ein parameterlosen Konstruktor für das Element sein.

Die Felder werden zur Entwurfszeit (Field1, Field2, Field3).

bekannt

Nach DevExpress IList, IListSource, ITypedList oder IBindingList verwenden können. Der Unterschied zwischen ihnen ist, ob Sie neue Zeilen hinzufügen oder wenn Änderungen REFIN die Steuerung.

So können Sie ToList () verwenden:

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();

Hinweis : Ich habe es getestet mit DevExpress 10.1, aber wenn es die Bindung dann sollte es noch funktioniert nach MSDN .

Ich habe nicht mit dem DevExpress Grid gearbeitet, aber ich habe viel mit dem .NET Datagridview getan.

Hat der DevExpress Raster, um die gleiche Funktionalität wie das .NET Datagridview, die Auto-Spalt erzeugt?

Wenn ja, dann sollte es zeigen, was Felder in Ihrer Abfrage gefunden werden und verwenden Field1, Field2 und Field3 (aus Ihrem Beispiel-Code) als Spaltennamen.

oder schalten Sie einfach die Auto Spalte Funktion erzeugen und die Spalten zur Entwurfszeit hinzufügen. Solange sie dem entsprechen, was Ihre Abfrage gibt sollte es funktionieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top