C# WPF DataGridの使用 コードサンプル

DataGridにデータをセットする

var table = dataSet1.booksTable
    .OrderByDescending(x => x.publishDate)
    .Select(x => new { title = x.title, publish = x.publishDate});

dataGrid1.ItemsSource = table;

DataGridでカレント行の特定列の値を取得する

private void dataGrid1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    // 取得するColumnのIndexを2とする
    if (dataGrid1.SelectedIndex >= 0)
    {
        // 必要に応じてレイアウトの更新をする
        // dataGrid1.UpdateLayout();

        DataGridRow row = (DataGridRow)dataGrid1.ItemContainerGenerator.ContainerFromIndex(dataGrid1.SelectedIndex);
        string value = ((TextBlock)dataGrid1.Columns[2].GetCellContent(row)).Text;
    }
}

DataGridTextColumn 改行・リターンキー(Enter)の許可・IME(日本語入力)

<DataGridTextColumn x:Name="memoColumn" Binding="{Binding Memo}" Header="Memo" Width="400">
    <DataGridTextColumn.EditingElementStyle>
        <Style TargetType="TextBox">
            <Setter Property="TextWrapping" Value="Wrap" />
            <Setter Property="AcceptsReturn" Value="True"/>
            <Setter Property="InputMethod.PreferredImeState" Value="On" />
        </Style>
    </DataGridTextColumn.EditingElementStyle>
</DataGridTextColumn>

DataGridのColumnのフォーマット

<DataGridTextColumn Binding="{Binding createDate, StringFormat=yyyy/MM/dd hh:mm}" Width="100" Header="post" />

Columnテキストの右寄せ

<DataGridTextColumn Binding="{Binding Id}">
    <DataGridTextColumn.ElementStyle>
        <Style TargetType="{x:Type TextBlock}" >
            <Setter Property="TextAlignment" Value="Right" />
        </Style>
    </DataGridTextColumn.ElementStyle>
</DataGridTextColumn>

コードによるテキストの右寄せ

Style style = new Style(typeof(DataGridCell));
style.Setters.Add(new Setter(HorizontalAlignmentProperty, HorizontalAlignment.Right));
dataGrid1.Columns[1].CellStyle = style;

ヘッダーの右寄せ

<DataGridTextColumn Binding="{Binding Name}" Header="Name">
    <DataGridTextColumn.HeaderStyle>
        <Style TargetType="DataGridColumnHeader" >
            <Setter Property="HorizontalContentAlignment" Value="Right" />
        </Style>
    </DataGridTextColumn.HeaderStyle>
</DataGridTextColumn>
 

Columnテキストのマージン

<DataGridTextColumn Binding="{Binding Name}" Header="Name">
    <DataGridTextColumn.ElementStyle>
        <Style TargetType="{x:Type TextBlock}" >
            <Setter Property="Margin" Value="2,0,0,0"/>
        </Style>
    </DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
 

DataGridにButton Columnを追加する

DataGridにボタン行を追加する

<DataGridTemplateColumn  Header="BUTTON" Width="SizeToHeader">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <Button x:Name="myButton" Click="myButton_Click"  Content="{Binding ID}"></Button>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

DataGridのButton ColumnのBindigデータにテキストを加えて表示する

ContentStringFormat=”{}ID {0} Open”を追加する

表示例 : ID 333 OPEN

<Button x:Name="myButton" Click="myButton_Click"  Content="{Binding ID}" ContentStringFormat="{}ID {0} Open"></Button>
                                    

列を固定する

DataGridのFrozenColumnCount プロパティに固定したい列の左からの順番を指定する

dataGrid1.FrozenColumnCount = 2;

CustomFilterを使って絞り込む

CollectionViewSource dataGridViewSource = ((CollectionViewSource)(FindResource("dataGridViewSource")));
BindingListCollectionView myView = ((BindingListCollectionView)dataGridViewSource.View);


if (!myView.IsAddingNew && !myView.IsEditingItem)
    myView.CustomFilter = "Id=10";
  

入力した値の検証

public bool IsValid(DependencyObject dataGrid)
{
    if (Validation.GetHasError(dataGrid))
        return false;


    // Validate all the bindings on the children
    for (int i = 0; i != VisualTreeHelper.GetChildrenCount(dataGrid); ++i)
    {
        DependencyObject child = VisualTreeHelper.GetChild(dataGrid, i);
        if (!IsValid(child)) { return false; }
    }


    return true;
}
  

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください