■90928 / inTopicNo.3) |
Re[2]: WPFのDataGridでフィルタリングしたい |
□投稿者/ くろ (24回)-(2019/05/14(Tue) 11:50:00)
|
ありがとうございます。
ソースをシンプルにしましたが発生しました。
グリッドのセルをダブルクリックしてセル文字列をコピーして
フィルタリングのテキストボックスに値を貼り付けると発生するようです。
テキストファイルからなど他からコピーすれば発生しませんでした。
XAML
<Window x:Class="MainWindow"
x:Name="_this"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<DataGrid x:Name="dataGrid" VerticalScrollBarVisibility="Visible" HorizontalScrollBarVisibility="Visible" >
</DataGrid>
</Grid>
</Window>
C#のコード
public MainWindow()
{
InitializeComponent();
InitDataTable();
}
private void InitDataTable()
{
dataGrid.AutoGenerateColumns = false;
CollectionViewSource collectionViewSource = new CollectionViewSource();
for (int n = 0; n < 5; n++)
{
// パネルの生成
StackPanel panel = new StackPanel();
TextBox textBox = new TextBox();
panel.Children.Add(new TextBlock() { Text = "カラム" + n });
panel.Children.Add(textBox);
// 変更時フィルタイベントの実行
textBox.TextChanged += (object sender, TextChangedEventArgs e) =>
{
collectionViewSource.IsLiveFilteringRequested = false;
collectionViewSource.IsLiveFilteringRequested = true;
};
// カラム追加
var dgtc = new DataGridTextColumn()
{
Header = panel,
Binding = new Binding("[カラム" + n + "]"),
IsReadOnly = false,
MaxWidth = 100,
};
dataGrid.Columns.Add(dgtc);
}
// データの生成
List<Hashtable> list = new List<Hashtable>();
for (int i = 0; i < 10; i++)
{
Hashtable t = new Hashtable();
list.Add(t);
for (int n = 0; n < 5; n++)
{
t["カラム" + n] = "値_" + n + "_" + i;
}
}
collectionViewSource.Source = list;
dataGrid.ItemsSource = collectionViewSource.View;
}
|
|