GridControl

De Banane Atomic
Révision datée du 28 juillet 2015 à 08:35 par Nicolas (discussion | contributions) (→‎Liens)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigationAller à la recherche

Liens

Server Mode vs Instant Feedback Mode

  • Server Mode permet de récupérer les données à afficher par blocks, et non l'ensemble de données de la source. Ce qui réduit le temps de chargement.
  • Instant Feedback Mode est équivalent au Server Mode mais en asynchrone. Ainsi même durant le temps de chargement des données, l'utilisateur garde la main.

Avec Entity Framework

Csharp.svg
using System.Data.Entity; // nécessaire pour l'appel de Load()
entities.FI.Load();
MyGrid.ItemsSource = entities.FI.Local;

Server Mode

Chargement uniquement des données à afficher.

Csharp.svg
MyGrid.ItemsSource = new LinqServerModeSource()
{
    ElementType = typeof(MaTable),
    KeyExpression = "Id",
    QueryableSource = entities.MaTable
};
La source en lecture seule

Instant Feedback (asynchronous) Mode

Xaml.svg
<dx:EntityInstantFeedbackDataSource Name="entitySource" KeyExpression="Id" />
        
<dxg:GridControl ItemsSource="{Binding ElementName=entitySource, Path=Data}"
                 AutoGenerateColumns="AddNew" 
                 EnableSmartColumnsGeneration="True">
    <dxg:GridControl.View>
        <dxg:TableView AllowPerPixelScrolling="True" ShowTotalSummary="True"/>
    </dxg:GridControl.View>
</dxg:GridControl>
Csharp.svg
entitySource.QueryableSource = _entities.MaTable;

Instant Feedback Mode

Customize Automatically Generated Columns

Xaml.svg
<dxg:GridControl x:Name="MyGrid" 
                 AutoGeneratedColumns="MyGrid_AutoGeneratedColumns">
Csharp.svg
private void MyGrid_AutoGeneratedColumns(object sender, RoutedEventArgs e)
{
    foreach (GridColumn column in MyGrid.Columns)
    {
        if (column.FieldName == "Id")
        {
            // cacher la colonne
            column.Visible = false;

            // appliquer un datatemplate: Foreground → Blue
            string cellTemplate = @"
        <DataTemplate xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""
                      xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml""
                      xmlns:dxe=""http://schemas.devexpress.com/winfx/2008/xaml/editors"">
            <dxe:TextEdit x:Name=""PART_Editor"" Foreground=""Blue""/>
        </DataTemplate>";
            column.CellTemplate = XamlReader.Parse(cellTemplate) as DataTemplate;
            // si le datatemplate est dans les ressources
            column.CellTemplate = Application.Current.MainWindow.Resources["MyTemplate"] as DataTemplate;

            // trier la colonne
            column.SortOrder = DevExpress.Data.ColumnSortOrder.Ascending;
        }
    }
}