none
DATAGRID CON ScrollViewer.CanContentScroll="False" CONSUME MUCHA MEMORIA AL LISTAR DATOS - SOLUCION RRS feed

  • Pregunta

  • Señores de ante mano gracias por la respuesta que me pueda dar.

    Estoy desarrollado un proyecto con WPF  C# tengo un datagrid con 4 columnas :

     <DataGrid x:Name="empleados" ColumnHeaderStyle="{DynamicResource CabeceraDataGrid}"  ScrollViewer.CanContentScroll="False"  VerticalScrollBarVisibility="Auto"  SelectedValuePath="empleadoid" AlternatingRowBackground="#FFDCDCDC" AlternationCount="2" AutoGenerateColumns="False" Background="#FFFFFFFF" BorderBrush="#FFADD8E6" CanUserAddRows="False" CanUserResizeRows="False" HorizontalGridLinesBrush="#FF4682B4" Margin="20,164,0,45" VerticalGridLinesBrush="#FF4682B4" SelectionUnit="FullRow" MinColumnWidth="25" CanUserReorderColumns="False" CanUserResizeColumns="True" ItemsSource="{Binding}" HorizontalAlignment="Left" Width="672">
          <DataGrid.Columns>
            <DataGridCheckBoxColumn xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Name="Chk" />
            <DataGridTextColumn Header="codigo" Width="40" Binding="{Binding codempleado}" />
            <DataGridTextColumn Header="Nombres completo" Width="420" Binding="{Binding ncompleto}" />
            <DataGridTextColumn Header="cargo" Width="55" Foreground="#FF0000FF" Binding="{Binding cargo}" />
            <DataGridTemplateColumn>
              <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                  <Button x:Name="botonver" Background="#00FFFFFF" BorderBrush="#00FFFFFF" Click="botonver_Click">
                    <StackPanel>
                      <Image Source="/Capa_Presentacion;component/image/cas.png" />
                    </StackPanel>
                  </Button>
                </DataTemplate>
              </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTemplateColumn>
              <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                  <Button x:Name="ds" Background="#00FFFFFF" BorderBrush="#00FFFFFF" Click="botonborrar_Click">
                    <StackPanel>
                      <Image Source="/Capa_Presentacion;component/image/botonborrar.png" />
                    </StackPanel>
                  </Button>
                </DataTemplate>
              </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
          </DataGrid.Columns>
        </DataGrid>

    como se ve en el código tengo un campo de tipo chekbox dentro del datagrid, y tengo un control checkbox "seleccionar todo" cuando activo el chek se activa todos los check del datagrid con este codigo:

     private void chkTodos_Checked(object sender, RoutedEventArgs e)
            {
    
                CheckBox source = (CheckBox)e.Source;
                CheckAllBoxes(this.UsuarioListGrid, new bool?(source.IsChecked == true));
            
            }
    
    void CheckAllBoxes(DependencyObject obj, bool? isChecked)
            {
                for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
                {
                    if (obj is CheckBox)
                    {
                        CheckBox box = (CheckBox)obj;
                        box.IsChecked = isChecked;
                    }
                    else
                    {
                        CheckAllBoxes(VisualTreeHelper.GetChild(obj, i), isChecked);
                    }
                }
            }

    hasta aquí trabaja bien pero con pocos registros, si se quiere mostrar mas de 100 registros demora en cargar, si quiero listar 500 registros rémora en cargar aproximadamente entre 7 a 10 minutos, según he averiguado esto pasa por este código ScrollViewer.CanContentScroll="False" si  el estado lo cambio a "TRUE" me lista en el gridview los 500 registros en cuestión de segundos, pero a la hora de activar el checkbox para activar todos los chek del gridview solo activa los check de los registros que se visualizan en pantalla, cuando me desplazo con la barra hacia abajo veo que no están marcados los demás datos, lo cual no pasa cuando tengo esta propiedad ScrollViewer.CanContentScroll="False" Pero al tenerlo en FALSe me consume demasiada memoria y tarda demasiado en listar los registros.

    Que solución existe para este problema. Espero me ayuden...


    viernes, 30 de enero de 2015 21:08