2011-08-04 10 views
1

私はDataGridに列を選択するためのチェックボックス列と、列ヘッダーの「すべて選択」チェックボックスとグループヘッダーの「すべて選択」チェックボックスを使用できます。WPF Datagrid - グループ内のすべての行をプログラムで選択できますか?

XAML:

<DataGrid x:Name="TablaDatos" 
      AutoGenerateColumns="False" 
      CanUserAddRows="False" 
      CanUserReorderColumns="True" 
      CanUserResizeColumns="True" 
      CanUserResizeRows="True" 
      CanUserSortColumns="True" 
      SelectionMode="Extended" 
      Grid.Row="2"> 
     <DataGrid.GroupStyle> 
      <GroupStyle> 
       <GroupStyle.ContainerStyle> 
        <Style TargetType="{x:Type GroupItem}"> 
         <Setter Property="Margin" Value="0,0,0,5"/> 
         <Setter Property="Template"> 
          <Setter.Value> 
           <ControlTemplate TargetType="{x:Type GroupItem}"> 
            <Expander IsExpanded="True"> 
             <Expander.Background> 
              <LinearGradientBrush> 
               <GradientStop Color="#A0FAFAFF" Offset="0.3" /> 
               <GradientStop Color="#FFAACAFF" Offset="1" /> 
              </LinearGradientBrush> 
             </Expander.Background> 
             <Expander.Header> 
              <DockPanel> 
               <CheckBox x:Name="ProyectoCHK" Margin="0 5 0 0" Click="ProyectoCHK_Click"></CheckBox> 
               <Label FontWeight="Bold" Content="{Binding Path=Name}" Width="200" Target="{Binding ElementName=ProyectoCHK}"/> 
               <TextBlock FontWeight="Bold" Text="{Binding Path=ItemCount}" Margin="0 5 0 0"/> 
              </DockPanel> 
             </Expander.Header> 
             <Expander.Content> 
              <ItemsPresenter /> 
             </Expander.Content> 
            </Expander> 
           </ControlTemplate> 
          </Setter.Value> 
         </Setter> 
        </Style> 
       </GroupStyle.ContainerStyle> 
      </GroupStyle> 
     </DataGrid.GroupStyle> 
     <DataGrid.Columns> 
      <DataGridTemplateColumn> 
       <DataGridTemplateColumn.HeaderTemplate> 
        <DataTemplate> 
         <CheckBox/> 
        </DataTemplate> 
       </DataGridTemplateColumn.HeaderTemplate> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <CheckBox IsChecked="{Binding Path=Checked, UpdateSourceTrigger=PropertyChanged}" Name="theCheckbox"/> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
      <DataGridTextColumn IsReadOnly="True" Header="Id. Prueba" Binding="{Binding id_prueba}" SortDirection="Descending"></DataGridTextColumn> 
      <DataGridTextColumn IsReadOnly="True" Header="VSAT" Binding="{Binding VSAT}"></DataGridTextColumn> 
      <DataGridTextColumn IsReadOnly="True" Header="PC" Binding="{Binding PC}"></DataGridTextColumn> 
      <DataGridTextColumn IsReadOnly="True" Header="Fecha Evento" Binding="{Binding FechaUltimoEvento, StringFormat={}\{0:dd/MM/yyyy HH:mm:ss\}}"></DataGridTextColumn> 
      <DataGridTextColumn IsReadOnly="True" Header="Estado" Binding="{Binding Estado}"></DataGridTextColumn> 
      <DataGridTextColumn IsReadOnly="True" Header="Mensaje" Binding="{Binding Mensaje}"></DataGridTextColumn> 
      <DataGridTextColumn IsReadOnly="True" Header="Fecha de creación" Binding="{Binding FechaCreacionPrueba}"></DataGridTextColumn> 
      <DataGridTextColumn IsReadOnly="True" Header="Proyecto" Binding="{Binding PROYECTO}"></DataGridTextColumn> 
      <DataGridTextColumn IsReadOnly="True" Header="Departamento" Binding="{Binding DEPARTAMENTO}"></DataGridTextColumn> 
      <DataGridTextColumn IsReadOnly="True" Header="Municipio" Binding="{Binding MUNICIPIO}"></DataGridTextColumn> 
      <DataGridTextColumn IsReadOnly="True" Header="Localidad" Binding="{Binding LOCALIDAD}"></DataGridTextColumn> 
      <DataGridTextColumn IsReadOnly="True" Header="Id. punto" Binding="{Binding IDENTIFICADOR_PUNTO}"></DataGridTextColumn> 
      <DataGridTextColumn IsReadOnly="True" Header="Usuario" Binding="{Binding UsuarioPrueba}"></DataGridTextColumn> 
     </DataGrid.Columns> 
    </DataGrid> 

¿どのように私は、グループ内の行のすべてのチェックボックスを選択することはできますか?

ありがとうございました。チェックボックスに

答えて

0

「ProyectoCHK」のチェックイベントこれを実行...(以下のコードは、改善が必要な場合があります)

  1. ProyectoCHKの視覚的な兄弟がGroupStyleでNameプロパティにバインドされているラベルです。それにアクセスし、そのコンテンツを "GroupValue"という変数にコピーします。

  2. DataGridCollectionViewにバインドしたとすると、グループ化するとGroupDescriptionが表示されます。

このようにアクセスすると、グループ化されたグループがGroupedPropertyNameになります。それからあなたは使用できます

 var items = DataGrid.ItemsSource.AsQueryable.Where(GroupedPropertyName + " == " + "\"" + GroupValue + "\""); 

AsQueryable()はLinq名前空間で利用可能です。上記のクエリフィルタによって返さ

  1. items、ちょうど(そのアイテムクラスはINotifyPropertyChangedを実装しており、CheckedプロパティのPropertyChanged通知を調達していると仮定して)item.Checked = true個体を作ります。

これが動作するかどうかを教えてください。

0

MVVMパターンを使用している場合は、ビューモデルのバインドされたCheckBoxプロパティを "True"に設定するだけで、CheckBoxコントロールには値

が反映されます
関連する問題