こんにちは!
テクニカルコンサルティングチームの古堅です。
本記事では、弊社 WPF 製品「Ultimate UI for WPF」を長年ご利用頂いているお客様からのご要望を元に、Excel ライクな機能の実現として、弊社 WPF 製品「Ultimate UI for WPF」を利用した「複数セルを範囲選択した際の集計値 (平均、合計、データの個数) をリアルタイムに表示する」実装方法を紹介します!
サンプルの動作
複数セルを範囲選択した際の集計値をリアルタイムで表示します。
本サンプルでは、平均、合計、選択されたセル数を表示しています。
サンプル
サンプルのダウンロード
サンプルコード一式はこちらからダウンロードできます。
サンプルコードの解説
MainWindow.xaml
<StackPanel> <igWPF:XamDataGrid x:Name="xamDataGrid" SelectedItemsChanged="xamDataGrid_SelectedItemsChanged" > <igWPF:XamDataGrid.FieldSettings> <igWPF:FieldSettings CellClickAction="SelectCell"/> </igWPF:XamDataGrid.FieldSettings> </igWPF:XamDataGrid> <!-- リアルタイム集計値の表示エリア --> <Border Padding="5" Background="LightGray"> <StackPanel Orientation="Horizontal"> <TextBlock Width="120" x:Name="lblAverage" Text="平均" Margin="12,0,0,0"></TextBlock> <TextBlock Width="200" x:Name="lblCount" Text="選択セルの個数" Margin="12,0,0,0"></TextBlock> <TextBlock Width="200" x:Name="lblSum" Text="合計" ></TextBlock> </StackPanel> </Border> </StackPanel>
MainWindow.xaml.cs
private void xamDataGrid_SelectedItemsChanged(object sender, Infragistics.Windows.DataPresenter.Events.SelectedItemsChangedEventArgs e) { int cellCount = 0; int cellCountOfTypeNumber = 0; decimal average = 0; decimal sum = 0; foreach (var cell in xamDataGrid.SelectedItems.Cells) { if (cell.Value != null) { // 値があるセルであれば、カウントを増やす cellCount += 1; decimal addSum = 0; // 数値項目か判定 if (Decimal.TryParse(cell.Value.ToString(), out addSum)) { // 平均値を算出するため、数値型のセルのカウントを行う cellCountOfTypeNumber += 1; // 合計値を加算 sum += addSum; } } } // 選択されたセルの情報を、各項目に反映する if (cellCountOfTypeNumber >= 1) { average = sum / cellCountOfTypeNumber; } lblAverage.Text = string.Format("平均 : {0:#,0}", average); lblCount.Text = string.Format("データの個数 : {0}", cellCount); lblSum.Text = string.Format("合計 : {0:#,0}", sum); }
SelectedItemsChanged イベント
選択中のセルが変更された場合に発生するイベントです。
本サンプルでは、セル選択範囲の変更感知に採用しています。
SelectedItems.Cells プロパティ
選択中のセルの情報を取得できるプロパティです。
本サンプルでは、選択されたデータの個数、平均および合計値の取得に利用しました。
開発全般に関するご相談はお任せください!
インフラジスティックス・ジャパンでは、各プラットフォームの特別技術トレーニングの提供や、開発全般のご支援を行っています。
「古い技術やサポート終了のプラットフォームから脱却する必要があるが、その移行先のプラットフォームやフレームワークの検討が進まない、知見がない。」
「新しい開発テクノロジーを採用したいが、自社内にエキスパートがいない。日本語リソースも少ないし、開発を進められるか不安。」
「自社のメンバーで開発を進めたいが、これまで開発フェーズを外部ベンダーに頼ってきたため、ツールや技術に対する理解が乏しい。」
「UIを刷新したい。UIデザインやUI/UXに関する検討の進め方が分からない。外部のデザイン会社に頼むと、開発が難しくなるのではないか、危惧している。」
といったご相談を承っています。
お問い合せはこちらからお気軽にご相談ください。