DataGridコントロール

動的カラムの追加とバインド

一般の列を利用する場合

this.dataGrid1.Columns.Add(new DataGridTextColumn { Header = "ID", Binding = new System.Windows.Data.Binding("id") });

テンプレート列(DataGridTemplateColumn)を利用する場合

■方法一

テンプレートのXAMLのコードを定義する

private string CreateColumnTemplate( string propertyName)
{
   StringBuilder CellTemp = new StringBuilder();
   CellTemp.Append("<DataTemplate ");
   CellTemp.Append("xmlns='http://schemas.microsoft.com/winfx/"); CellTemp.Append("2006/xaml/presentation' ");
   CellTemp.Append("xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'>"); 
   CellTemp.Append(String.Format("<TextBlock Text='{{Binding Path={0}}}'/>", propertyName)); 
   CellTemp.Append("</DataTemplate>");
   return CellTemp.ToString();
}

C#側のソースコード:
※System.Windows.Markup.XamlReaderクラスを利用して、Xamlを読み込む

DataGridTemplateColumn dtc = new DataGridTemplateColumn();
dtc.CellTemplate = (DataTemplate)XamlReader.Load(CreateColumnTemplate( "id"));
this.dataGrid2.Columns.Add(dtc);

■方法二

リソースにテンプレートを定義します。

<Application.Resources>
   <ResourceDictionary>
        <DataTemplate x:Key="myCellTemplate">
            <TextBlock Text="{Binding Path=id}"/>
        </DataTemplate>
   </ResourceDictionary>                
</Application.Resources>

C#側のソースコード:

DataGridTemplateColumn dtc = new DataGridTemplateColumn();
dtc.CellTemplate = (DataTemplate)App.Current.Resources["myCellTemplate"];           
this.dataGrid2.Columns.Add(dtc);

セルのテンプレート

スタイルの定義:

<ResourceDictionary
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk">

   <Style x:Key="AlignCenter" TargetType="sdk:DataGridCell">
       <Setter Property="HorizontalContentAlignment" Value="Center" />
       <Setter Property="VerticalContentAlignment" Value="Center" />
   </Style>
</ResourceDictionary>

XAML側の使用:

<sdk:DataGrid AutoGenerateColumns="False"                       
     CellStyle="{Binding Source={StaticResource AlignCenter}}">

ネストDataGrid

DataGridのDetailsTemplateにネストのDataGridを入れます。

<sdk:RowDetailsTemplate>
 <DataTemplate>
      <sdk:DataGrid ItemsSource="{Binding YourChildCollectionPropertyName}" />
 </DataTemplate>
</sdk:RowDetailsTemplate>

DataGridコントロールがデータバインドする際に、データの値によって、セル内での描画をするのは?

 Windows Form のようなdataGrid1.Rows[0].Cells[1]みたいなプロパティが提供されていませんので、LoadingRowイベントを利用して、Rowがロードする時、セルの値を取得する

private void dataGrid1_LoadingRow(object sender, DataGridRowEventArgs e)
{
   //5番目列のセルを取得する
   Image image = (Image)dataGrid1.Columns[5].GetCellContent(e.Row);
   //ここの「Thumbnail」はデータバインド時、データの列名
   Byte[] bits = ((Comics)e.Row.DataContext).Thumbnail;

   if (image != null && bits != null && bits.Length > 0)
   {
       BitmapImage bi = new BitmapImage();
       bi.SetSource(new MemoryStream(bits));
       image.Source = bi;
   }
}

カスタマイズした列のソート

 DataGridに画像とかのオブジェクトを入れると、カラムのヘッダーをクリックしても、ソートができなくなります。

対策:

<sdk:DataGrid.Columns>
   <sdk:DataGridTemplateColumn SortMemberPath="バインドデータ中のソースしたいプロパティを定義する">
       <sdk:DataGridTemplateColumn.CellTemplate>
           <DataTemplate>
               <Image />
           </DataTemplate>
       </sdk:DataGridTemplateColumn.CellTemplate>
   </sdk:DataGridTemplateColumn>
</sdk:DataGrid.Columns>

DataGridView行背景を変更する

DataGridView内行の背景を変更するのは、下記のような処理で反映できない。

(e.Row as DataGridRow).BackGround = new SolidColorBrush()

下記のようなスタイル定義の方法で、行背景を変更できます。

(e.Row as DataGridRow).Style = Application.Current.Resources["DataGridRowStyle"] as Style;
<Style x:Key="DataGridRowStyle" TargetType="sdk:DataGridRow">
   <Setter Property="Background" Value="#F0FF0000"/>
   <Setter Property="Template">
       <Setter.Value>
           <ControlTemplate TargetType="sdk:DataGridRow">
               <sdk:DataGridFrozenGrid x:Name="Root" >
                   <sdk:DataGridFrozenGrid.Resources>
                       <Storyboard x:Key="DetailsVisibleTransition">
                           <DoubleAnimation Duration="00:00:0.1" Storyboard.TargetName="DetailsPresenter" Storyboard.TargetProperty="ContentHeight"/>
                       </Storyboard>
                   </sdk:DataGridFrozenGrid.Resources>
                   <sdk:DataGridFrozenGrid.ColumnDefinitions>
                       <ColumnDefinition Width="Auto"/>
                       <ColumnDefinition/>
                   </sdk:DataGridFrozenGrid.ColumnDefinitions>
                   <VisualStateManager.VisualStateGroups>
                       <VisualStateGroup x:Name="CommonStates">
                           <VisualState x:Name="Normal"/>
                           <VisualState x:Name="NormalAlternatingRow">
                               <Storyboard>
                                   <DoubleAnimation Duration="0" Storyboard.TargetName="BackgroundRectangle" Storyboard.TargetProperty="Opacity" To="0"/>
                               </Storyboard>
                           </VisualState>
                           <VisualState x:Name="MouseOver">
                               <Storyboard>
                                   <DoubleAnimation Duration="0" Storyboard.TargetName="BackgroundRectangle" Storyboard.TargetProperty="Opacity" To=".5"/>
                               </Storyboard>
                           </VisualState>
                           <VisualState x:Name="NormalSelected">
                               <Storyboard>
                                   <DoubleAnimation Duration="0" Storyboard.TargetName="BackgroundRectangle" Storyboard.TargetProperty="Opacity" To="1"/>
                               </Storyboard>
                           </VisualState>
                           <VisualState x:Name="MouseOverSelected">
                               <Storyboard>
                                   <DoubleAnimation Duration="0" Storyboard.TargetName="BackgroundRectangle" Storyboard.TargetProperty="Opacity" To="1"/>
                               </Storyboard>
                           </VisualState>
                           <VisualState x:Name="UnfocusedSelected">
                               <Storyboard>
                                   <DoubleAnimation Duration="0" Storyboard.TargetName="BackgroundRectangle" Storyboard.TargetProperty="Opacity" To="1"/>
                                   <ColorAnimation Duration="0" Storyboard.TargetName="BackgroundRectangle" Storyboard.TargetProperty="(Fill).Color" To="#FFE1E7EC"/>
                               </Storyboard>
                           </VisualState>
                       </VisualStateGroup>
                       <VisualStateGroup x:Name="ValidationStates">
                           <VisualState x:Name="Valid"/>
                           <VisualState x:Name="Invalid">
                               <Storyboard>
                                   <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetName="BackgroundRectangle" Storyboard.TargetProperty="Visibility">
                                       <DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed"/>
                                   </ObjectAnimationUsingKeyFrames>
                                   <DoubleAnimation Duration="0" Storyboard.TargetName="InvalidVisualElement" Storyboard.TargetProperty="Opacity" To="1"/>
                               </Storyboard>
                           </VisualState>
                       </VisualStateGroup>
                   </VisualStateManager.VisualStateGroups>
                   <sdk:DataGridFrozenGrid.RowDefinitions>
                       <RowDefinition/>
                       <RowDefinition Height="Auto"/>
                       <RowDefinition Height="Auto"/>
                   </sdk:DataGridFrozenGrid.RowDefinitions >
                   <Border BorderBrush="Black" BorderThickness="2" Grid.ColumnSpan="2" Grid.RowSpan="2" CornerRadius="4"></Border>
                   <Rectangle x:Name="BackgroundRectangle" Fill="#FFBADDE9" Opacity="0" Grid.ColumnSpan="2" Grid.RowSpan="2"/>
                   <Rectangle x:Name="InvalidVisualElement" Fill="#FFF7D8DB" Opacity="0" Grid.ColumnSpan="2" Grid.RowSpan="2"/>
                   <sdk:DataGridRowHeader x:Name="RowHeader" Grid.RowSpan="3" sdk:DataGridFrozenGrid.IsFrozen="True"/>
                   <sdk:DataGridCellsPresenter x:Name="CellsPresenter" Grid.Column="1" sdk:DataGridFrozenGrid.IsFrozen="True"/>
                   <sdk:DataGridDetailsPresenter x:Name="DetailsPresenter" Grid.Column="1" Grid.Row="1"/>
                   <Rectangle x:Name="BottomGridLine" Height="1" HorizontalAlignment="Stretch" Grid.Column="1" Grid.Row="2"/>
               </sdk:DataGridFrozenGrid>
           </ControlTemplate>
       </Setter.Value>
   </Setter>
</Style>

参照情報:
http://msdn.microsoft.com/ja-jp/library/cc278066(vs.95).aspx



中古車買取実績No.1ガリバー

コメント:



(画像の文字列を入力して下さい)

トップ   編集 凍結 差分 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019/12/02 (月) 12:47:27 (1627d)

G|Cg|C@Amazon Yahoo yV

z[y[W yVoC[UNLIMITȂ1~] COiq COsیI