WPF: Как получить текст, выделенный в ячейке DataGrid?

235
08 сентября 2021, 17:50

Такая проблема: необходимо осуществить поиск по выделенному тексту, допустим, пользователь выделяет часть текста в ячейке и необходимо вывести только те записи, в которых присутствует эта часть текста (точнее в столбце, где и выделялась часть текста). Data grid хранит простенькие объекты с 5 полями. Всё столбцы типа textcolumn.

Даже не знаю как получить выделенный текст из ячейки

Answer 1

Получить выделенный текст из ячейки можно, например, следующим образом: подпишитесь на PreparingCellForEdit, и там:

private void OnPreparingCellForEdit(object sender, DataGridPreparingCellForEditEventArgs e)
{
    if (e.EditingElement is TextBox textBox)
    {
        textBox.SelectionChanged += OnSelectionChanged;
    }
}

В CellEditEnding надо отписать от события:

private void OnCellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
    if (e.EditingElement is TextBox textBox)
    {
        textBox.SelectionChanged -= OnSelectionChanged;
    }
}

Здесь OnSelectionChanged — метод:

private void OnSelectionChanged(object sender, RoutedEventArgs e)
{
    var textBox = (TextBox)sender;
    PatternTextBox.Text = textBox.SelectedText;
}

Разметка:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition/>
        <ColumnDefinition Width="Auto"/>
    </Grid.ColumnDefinitions>
    <TextBox x:Name="PatternTextBox"
             Text="{Binding Pattern, UpdateSourceTrigger=PropertyChanged}"/>
    <Button Grid.Column="1" Content="Search"
            Command="{Binding SearchCommand}"/>
    <DataGrid x:Name="MyDataGrid" Grid.Row="1" Grid.ColumnSpan="2"
              ItemsSource="{Binding Items}"
              PreparingCellForEdit="OnPreparingCellForEdit"
              CellEditEnding="OnCellEditEnding"/>
</Grid>

Фильтрацию коллекции Items реализуете в команде SearchCommand по тексту в свойстве Pattern в вашей VM.

READ ALSO
Удаление выбранных CheckBox&#39;ов в gridview

Удаление выбранных CheckBox'ов в gridview

я хочу удалить данные выбранные с CheckBox'омДанные находяться в GridView

258
Множество переменных или один большой массив?

Множество переменных или один большой массив?

Есть ли разница между использованием одного массива и множеством переменных для хранения данных? Или тут кому как удобнее?

166
Как правильно передать параметры по значению?

Как правильно передать параметры по значению?

Нужно выявить сумму всех авто (price), ответ всегда выводится 50

238
Как узнать расширение файла FileStream?

Как узнать расширение файла FileStream?

Имеется функция, которой на вход поступает объект класса FileStreamНеобходимо узнать его расширение (png,txt,bmp или другое)

178