Заполнение DataGrid в WPF анонимным набором типов - PullRequest
4 голосов
/ 01 июня 2011

Я заполняю сетку данных коллекцией анонимных типов (я устанавливаю свойство DataGrid's DataContext). И ошибок нет. И в datagrid ничего не проигрывается. Я пытался сделать то же самое с определенной коллекцией объектов, но опять ничего не отображается. Пожалуйста, не могли бы вы объяснить мне, что делать.

Спасибо! * * 1004

РЕДАКТИРОВАТЬ 1

Ok. Я попытался установить свойство ItemsSource, и оно работает. Но я получаю странный результат ..

enter image description here

РЕДАКТИРОВАТЬ 2

Не знаю как, но после запуска 3d теперь он работает нормально?

private void ShowABCResultsButtonOnClick(Object sender, RoutedEventArgs e)
{
    var anonArray = new List<NormalizedResult> 
    { 
        new NormalizedResult
        { 
            Key = 1,
            Title = "Колос", 
            Volume = 1322.01m,
            Weighted = 6.7840m,
            Result = 6.7840m,
            Group = "A"
        },
        new NormalizedResult
        { 
            Key = 2,
            Title = "Украинский Новый", 
            Volume = 1250.47m,
            Weighted = 6.4169m,
            Result = 13.2009m,
            Group = "A"
        },
        new NormalizedResult
        { 
            Key = 3,
            Title = "Ржано-Пшеничный", 
            Volume = 1202.1m,
            Weighted = 6.1687m,
            Result = 19.3695m,
            Group = "A"
        }
    };

    this.dataGrid2.ItemsSource = anonArray;
}

это мой код.

И снова я запустил .. и он отображается правильно только в третий раз?



Ответы [ 3 ]

7 голосов
/ 01 июня 2011

Вам, вероятно, нужно сделать две вещи.Первый, , как предложил @Tim , - это присвоение запроса свойству DataGrid.ItemsSource.

myDataGrid.ItemsSource = from a in x
                         select new { Prop1 = a.A, Prop2 = a.B, ... };

Второй бит будет включать автоматическую генерацию столбцов на вашем DataGrid:

<DataGrid x:Name="myDataGrid"
          AutoGenerateColumns="True" />

Редактировать : я воссоздал вашу фотографию с помощью автоматической генерации столбцов и анонимных типов с помощью ванильного запроса LINQ.Таким образом, вам понадобится , чтобы использовать явные столбцы для использования или переключения на реальный тип.

<DataGrid x:Name="myDataGrid"
          AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Property 1"
                            Binding="{Binding Prop1}"/>
        <DataGridTextColumn Header="Property 2"
                            Binding="{Binding Prop2}"/>
    </DataGrid.Columns>
</DataGrid>

Редактировать 2 : Вы МОЖЕТЕ использовать AutoGenerateColumns="True" простоне с IEnumerable<T>, где T является анонимным типом.При добавлении ToList проблема исчезнет.

myDataGrid.ItemsSource = (from m in typeof(int).GetMethods()
                          select new
                          {
                              Name = m.Name,
                              ReturnType = m.ReturnType.FullName
                          }).ToList();

XAML затем вернется к:

<DataGrid x:Name="myDataGrid"
          AutoGenerateColumns="True" />
5 голосов
/ 01 июня 2011

Уверен, вы должны установить вместо DataGrid ItemsSource.

2 голосов
/ 01 июня 2011

, пожалуйста, убедитесь, что вы используете то же имя свойства вашего анонимного объекта при связывании его в Grid данных и убедитесь, что коллекция содержит элементы.

...