Попытка загрузить очень длинный список в WPF DataGrid - PullRequest
0 голосов
/ 18 ноября 2011

У меня очень большой xml-файл, 4677 КБ - в основном около 26000 строк, каждая из которых выглядит следующим образом:

<samples>
<sample id=1 field =test field1=test1 field2=test2 field3=""test3"" field4=""test4"" field5=""test5"" field6=""test6"" field7=""test7""  field8=""test8"" field9=""test9"" field10=""test10""   />
<sample id=""2"" field =""test"" field1=""test1"" field2=""test2"" field3=""test3"" field4=""test4"" field5=""test5"" field6=""test6"" field7=""test7""  field8=""test8"" field9=""test9"" field10=""test10""   />
<sample id=""3"" field =""test"" field1=""test1"" field2=""test2"" field3=""test3"" field4=""test4"" field5=""test5"" field6=""test6"" field7=""test7""  field8=""test8"" field9=""test9"" field10=""test10""   />

...

и я пытаюсь загрузить это в DataFrid WPF, используя DataSet / DataView. Конечно же, OutOfMemoryException сработало при попытке связать это следующим образом:

        <Grid x:Name="LayoutRoot">
        <HeaderedContentControl Header="Sample Data">
        <DataGrid
                x:Name="DataGrid"
                AutoGenerateColumns="True"
                ItemsSource="{Binding Path=GridData, Mode=OneWay}">
            </DataGrid>
        </HeaderedContentControl>
    </Grid>

Я попытался добавить VirtualizingStackPanel.IsVirtualizing = "True" (хотя это значение по умолчанию), а также VirtualizingStackPanel.VirtualizationMode = "Recycling", но это не помогло.

Я знаю, что это тонны данных для элемента управления, мне интересно, каковы мои варианты.

Ответы [ 3 ]

1 голос
/ 25 апреля 2013

Попробуйте установить Ширина и Высота из DataGrid , чтобы зафиксировать значения.Это то, что исправило проблему в нашем случае.

<Grid x:Name="LayoutRoot">
    <HeaderedContentControl Header="Sample Data">
        <DataGrid
            x:Name="DataGrid"
            Width="600" Height="400"
            AutoGenerateColumns="True"
            ItemsSource="{Binding Path=GridData, Mode=OneWay}">
        </DataGrid>
    </HeaderedContentControl>
</Grid>
0 голосов
/ 18 ноября 2011

Я согласен с HCL, что это не связано с предоставлением этих элементов управления.Я бы хотел, чтобы у вас была модель представления с отдельной структурой данных, связанной с представлением.Затем загрузите структуру данных из вашего XML-файла.Таким образом, вы разделяете задачи и сужаетесь к проблеме.Конечно, связующий элемент не является виновником.

0 голосов
/ 18 ноября 2011

Не думаю, что 4,7 мегабайта данных приведут к исключению нехватки памяти.Кроме того, как вы уже писали, DataGrid работает в режиме виртуализации.Получаете ли вы исключение после установки ItensSource?
Попробуйте загрузить данные, не подключая их к DataGrid.Тогда вы знаете, если проблема в коде загрузки.Я бы проверил код загрузки для бесконечного цикла.

...