SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Silverlight/WPFで使える逆引きTips集

Silverlight/WPFで使える逆引きTips集
――DataGrid機能(Silverlight後編)

(19) DataGridコントロール Silverlight後編

  • X ポスト
  • このエントリーをはてなブックマークに追加

06.独自の列を追加する

 DataGridには既定の列の型として下表のものがあります。

既定の列の型
列の種類 説明
DataGridTextColumn テキストを表示
DataGridHyperlinkColumn URIデータを表示
DataGridComboBoxColumn 列挙型のデータを表示
DataGridCheckBoxColumn ブール型のデータを表示

 上記の他に<DataGridTemplateColumn>を使用して独自の列を追加することが可能です。 

 下記は独自の列を追加する例です。

 <DataGridTemplateColumn>を使用してButtonコントロールを表示するようにしています。ButtonコントロールなのでClickイベントを利用することが可能です。

独自の列を追加する例
独自の列を追加する例
XAMLの例
 <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>
VBの例
 ' [更新]ボタンクリック時の処理
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
C#の例
 // [更新]ボタンクリック時の処理
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へ表示します。

データの編集が開始/終了されたことを知る例
データの編集が開始/終了されたことを知る例
XAMLの例
<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>
VBの例
 ' セルの編集開始時の処理
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
C#の例
 // セルの編集開始時の処理
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の編集開始/終了を知るには、専用のイベントを利用する。

次のページ
08.ページング処理をする

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Silverlight/WPFで使える逆引きTips集連載記事一覧

もっと読む

この記事の著者

HIRO(ヒロ)

HIRO's.NETのHIROです。とある半導体工場のSEです。VB.NET, C#, PowerShellによるプログラミングを楽しんでいます。最近はBlog でPowerShellについて書いています。2008/07/07にPowerShell from Japan!!というサイトを立ち上げまし...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6016 2011/07/07 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング