07.独自の列を追加する
DataGridには既定の列の型として下表のものがあります。
| 列の種類 | 説明 |
| DataGridTextColumn | テキストを表示 |
| DataGridHyperlinkColumn | URIデータを表示 |
| DataGridComboBoxColumn | 列挙型のデータを表示 |
| DataGridCheckBoxColumn | ブール型のデータを表示 |
この他、<DataGridTemplateColumn>を使用することで独自の列を追加することができます。
下記は独自の列を追加する例です。<DataGridTemplateColumn>を使用してButtonコントロールを表示するようにしています。ButtonコントロールなのでClickイベントを利用することが可能です。
<DataGrid>
<DataGrid.Columns>
:
:省略
:
<!--★★★[更新]ボタン列 ここから★★★-->
<DataGridTemplateColumn Header="更新">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="更新" x:Name="btnUpdate"
Click="btnUpdate_Click"></Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<!--★★★[更新]ボタン列 ここまで★★★-->
<!--★★★[削除]ボタン列★★★-->
<DataGridTemplateColumn Header="削除">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="削除" x:Name="btnDelete"
Click="btnDelete_Click"></Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<!--★★★[削除]ボタン列 ここまで★★★-->
</DataGrid.Columns>
</DataGrid>
' [更新]ボタンクリック時の処理
Private Sub btnUpdate_Click(sender As System.Object, e As System.Windows.RoutedEventArgs)
MessageBox.Show("[更新]ボタンが押されました")
End Sub
' [削除]ボタンクリック時の処理
Private Sub btnDelete_Click(sender As System.Object, e As System.Windows.RoutedEventArgs)
MessageBox.Show("[削除]ボタンが押されました")
End Sub
// [更新]ボタンクリック時の処理
private void btnUpdate_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("[更新]ボタンが押されました");
}
// [削除]ボタンクリック時の処理
private void btnDelete_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("[削除]ボタンが押されました");
}
独自の列を追加するには<DataGridTemplateColumn>を利用する。
08.データの編集が開始/終了されたことを知る
DataGridには下表に示すように、データの編集が開始/終了されたことを知るためのイベントが備わっています。データ編集の開始/終了のタイミングで何かしらの操作を行いたい場合には、これらのイベントを利用します。
| イベント | イベント発生タイミング |
| BeginningEdit | セルの編集開始時 |
| CellEditEnding | セルの編集終了時 |
| RowEditEnding | 行の編集終了時 |
下記はデータの編集が開始/終了されたことを知る例です。データ編集の開始や終了を、DataGridの下にあるTextBlockへ表示します。
<DataGrid BeginningEdit="customerDataGrid_BeginningEdit"
CellEditEnding="customerDataGrid_CellEditEnding"
RowEditEnding="customerDataGrid_RowEditEnding">
:省略
</DataGrid>
<TextBlock Name="textBlock1" Background="LightSkyBlue" />
' セルの編集開始時の処理
Private Sub CustomerDataGrid_BeginningEdit(sender As System.Object, e As System.Windows.Controls.DataGridBeginningEditEventArgs) Handles CustomerDataGrid.BeginningEdit
TextBlock1.Text = "編集が開始されました"
End Sub
' セルの編集終了時の処理
Private Sub CustomerDataGrid_CellEditEnding(sender As System.Object, e As System.Windows.Controls.DataGridCellEditEndingEventArgs) Handles CustomerDataGrid.CellEditEnding
TextBlock1.Text = "セルの編集が終了しました"
End Sub
' 行の編集終了時の処理
Private Sub CustomerDataGrid_RowEditEnding(sender As System.Object, e As System.Windows.Controls.DataGridRowEditEndingEventArgs) Handles CustomerDataGrid.RowEditEnding
TextBlock1.Text = "行の編集が終了しました"
End Sub
// セルの編集開始時の処理
private void customerDataGrid_BeginningEdit(object sender, DataGridBeginningEditEventArgs e)
{
textBlock1.Text = "編集が開始されました";
}
// セルの編集終了時の処理
private void customerDataGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
textBlock1.Text = "セルの編集が終了しました";
}
// 行の編集終了時の処理
private void customerDataGrid_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
{
textBlock1.Text = "行の編集が終了しました";
}
DataGridの編集開始/終了を知るには、専用のイベントを利用する。
まとめ
前編、後編とWPFにおけるDataGridのTipsを取り上げました。DataGridは多くの機能を持っており、紹介したTipsはごく一部でしかありません。さらなる機能について興味がある方は、ぜひ下記のMSDNのリンクを参照ください。
次回はSilverlightのDataGridに関するTIpsをお届けする予定です。どうぞお楽しみに。


