前提・実現したいこと
WPFでDataGridViewを利用して、チェックボックス付きのデータリスト一覧を表示。
表示は対象フォルダ内のファイル一覧になります。チェックボックスを入れると、対象ファイル名を取得してファイルに対して色々な編集をするプログラムを作成しています。
DataGridViewにチェックボックスを配置して、ファイル一覧を表示させるところまでは出来たのですが、チェックボックスをクリックした際に対象の行を読み取ることが出来なくて困っています。よろしくお願いいたします。
発生している問題・エラーメッセージ
チェックボックスをチェックされた時に、対象のファイル名(DataContextで取得できる?)を取得したいが、取得できない。
該当のソースコード
xamle
1<Window x:Class="DataGridViewOrTab.MainWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 5 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 6 xmlns:local="clr-namespace:DataGridViewOrTab" 7 mc:Ignorable="d" 8 Title="MainWindow" Height="450" Width="800"> 9 <Grid> 10 <TabControl> 11 <TabItem Header="対象フォルダ1"> 12 <DataGrid Name="forder1DataGrid" IsReadOnly="True" AutoGenerateColumns="False" VerticalScrollBarVisibility="Auto" Height="auto"> 13 <DataGrid.Columns> 14 <DataGridTemplateColumn Header="対象"> 15 <DataGridTemplateColumn.CellTemplate> 16 <DataTemplate> 17 <CheckBox IsChecked="{Binding IsChecked, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Center" VerticalAlignment="Center" Click="folder1_click" /> 18 </DataTemplate> 19 </DataGridTemplateColumn.CellTemplate> 20 </DataGridTemplateColumn> 21 <DataGridTextColumn Header="ファイル名" Binding="{Binding FileName}" /> 22 <DataGridTextColumn Header="備考" Binding="{Binding Comment}" /> 23 </DataGrid.Columns> 24 </DataGrid> 25 </TabItem> 26 <TabItem Header="対象フォルダ2"> 27 <DataGrid Name="forder2DataGrid" IsReadOnly="True" AutoGenerateColumns="False" VerticalScrollBarVisibility="Auto" Height="auto"> 28 <DataGrid.Columns> 29 <DataGridTemplateColumn Header="対象"> 30 <DataGridTemplateColumn.CellTemplate> 31 <DataTemplate> 32 <CheckBox IsChecked="{Binding IsChecked, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Center" VerticalAlignment="Center" /> 33 </DataTemplate> 34 </DataGridTemplateColumn.CellTemplate> 35 </DataGridTemplateColumn> 36 <DataGridTextColumn Header="ファイル名" Binding="{Binding FileName}" /> 37 <DataGridTextColumn Header="備考" Binding="{Binding Comment}" /> 38 </DataGrid.Columns> 39 </DataGrid> 40 </TabItem> 41 </TabControl> 42 </Grid> 43</Window> 44
C#
1 private void folder1_click(object sender, RoutedEventArgs e) 2 { 3 //ここでクリックしたデータグリッドのDataContextを取得したい... 4 System.Collections.Generic.List<orgFileInfo> tmpList = this.forder1DataGrid.ItemsSource as System.Collections.Generic.List<orgFileInfo>; 5 foreach(orgFileInfo ofile in tmpList) 6 { 7 if (ofile.IsChecked) 8 { 9 string name = ofile.FileName; 10 } 11 } 12 13 14 15 //Checkboxの内容は取得できない(何も入ってこない) 16 if(sender is System.Windows.Controls.CheckBox) 17 { 18 string str = ((System.Windows.Controls.CheckBox)sender).Tag + "がクリックされました。"; 19 } 20 21 }
C#
1 class orgFileInfo 2 { 3 public bool IsChecked { get; set; } 4 public string FileName { get; set; } 5 public string Comment { get; set; } 6 }
試したこと
1)下記サイトを参考に、DataGridViewのItemSouceから取得できないかやってみたが、ItemSouceは空で何も取得できなかった
参考:https://www.doraxdora.com/blog/2017/08/12/post-1997/
2)CheckBoxの内容も取得できるか試したが、何も取得できなかった。
補足情報(FW/ツールのバージョンなど)
VisualStudio2019 / Winows10
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/29 14:23