06.独自の列を追加する
DataGridには既定の列の型として下表のものがあります。
列の種類 | 説明 |
DataGridTextColumn | テキストを表示 |
DataGridHyperlinkColumn | URIデータを表示 |
DataGridComboBoxColumn | 列挙型のデータを表示 |
DataGridCheckBoxColumn | ブール型のデータを表示 |
上記の他に<DataGridTemplateColumn>を使用して独自の列を追加することが可能です。
下記は独自の列を追加する例です。
<DataGridTemplateColumn>を使用してButtonコントロールを表示するようにしています。ButtonコントロールなのでClickイベントを利用することが可能です。
<sdk:DataGrid> <sdk:DataGrid.Columns> :省略 <!--★★★[更新]ボタン列 ここから★★★--> <sdk:DataGridTemplateColumn Header="更新"> <sdk:DataGridTemplateColumn.CellTemplate> <DataTemplate> <Button Content="更新" x:Name="btnUpdate" Click="btnUpdate_Click"></Button> </DataTemplate> </sdk:DataGridTemplateColumn.CellTemplate> </sdk:DataGridTemplateColumn> <!--★★★[更新]ボタン列 ここまで★★★--> <!--★★★[削除]ボタン列 ここから★★★--> <sdk:DataGridTemplateColumn Header="削除"> <sdk:DataGridTemplateColumn.CellTemplate> <DataTemplate> <Button Content="削除" x:Name="btnDelete" Click="btnDelete_Click"></Button> </DataTemplate> </sdk:DataGridTemplateColumn.CellTemplate> </sdk:DataGridTemplateColumn> <!--★★★[削除]ボタン列 ここまで★★★--> </sdk:DataGrid.Columns> </sdk: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>を利用する。
07.データの編集が開始/終了されたことを知る
DataGridには下表に示すように、データの編集が開始/終了されたことを知るためのイベントが備わっています。データ編集の開始/終了のタイミングで何かしらの操作を行いたい場合には、これらのイベントを利用します。
イベント | イベント発生タイミング |
BeginningEdit | セルの編集開始時 |
CellEditEnding | セルの編集終了時 |
RowEditEnding | 行の編集終了時 |
下記はデータの編集が開始/終了されたことを知る例です。データ編集の開始や終了を、DataGridの下にあるTextBlockへ表示します。
<sdk:DataGrid BeginningEdit="customerDataGrid_BeginningEdit" CellEditEnded="customerDataGrid_CellEditEnded" RowEditEnded="customerDataGrid_RowEditEnded"> :省略 </sdk:DataGrid> <Border BorderBrush="Silver" BorderThickness="1" Name="Border1" Background="SkyBlue"> <TextBlock Name="TextBlock1" FontWeight="Bold" /> </Border>
' セルの編集開始時の処理 Private Sub CustomerDataGrid_BeginningEdit(sender As System.Object, e As System.Windows.Controls.DataGridBeginningEditEventArgs) Handles CustomerDataGrid.BeginningEdit TextBlock1.Text = "編集が開始されました" End Sub ' セルの編集終了時の処理 Private Sub CustomerDataGrid_CellEditEnded(sender As System.Object, e As System.Windows.Controls.DataGridCellEditEndedEventArgs) Handles CustomerDataGrid.CellEditEnded TextBlock1.Text = "セルの編集が終了しました" End Sub ' 行の編集終了時の処理 Private Sub CustomerDataGrid_RowEditEnded(sender As System.Object, e As System.Windows.Controls.DataGridRowEditEndedEventArgs) Handles CustomerDataGrid.RowEditEnded TextBlock1.Text = "行の編集が終了しました" End Sub
// セルの編集開始時の処理 private void customerDataGrid_BeginningEdit(object sender, DataGridBeginningEditEventArgs e) { TextBlock1.Text = "編集が開始されました"; } // セルの編集終了時の処理 private void customerDataGrid_CellEditEnded(object sender, DataGridCellEditEndedEventArgs e) { TextBlock1.Text = "セルの編集が終了しました"; } // 行の編集終了時の処理 private void customerDataGrid_RowEditEnded(object sender, DataGridRowEditEndedEventArgs e) { TextBlock1.Text = "行の編集が終了しました"; }
DataGridの編集開始/終了を知るには、専用のイベントを利用する。