Nano Hash - криптовалюты, майнинг, программирование

Как выполнить поиск первого столбца в сетке данных при нажатии клавиши пользователем

У меня есть приложение wpf, в котором есть таблица данных с именами в первом столбце и дополнительной информацией в других столбцах. Имена отсортированы по порядку. Если пользователь нажимает клавишу на клавиатуре, скажем, p, я бы хотел, чтобы сетка данных перешла к первой строке, где имя начинается с p. Если затем пользователь нажимает e, переходит к первой строке, которая начинается с pe и т. д. Возможно ли это в сетке данных? Я не смог найти ничего или примеров по этому поводу. Пожалуйста помоги.


Ответы:


1

Для этого вы должны добавить событие keydown. И Шаг 1: событие OnkeyDown получает текст ключа. Шаг 2: найдите товар в соответствии с вашим состоянием из списка. Шаг 3: Изменить выбранный элемент. Шаг 4: и прокрутите таблицу данных до выбранного элемента.

Событие нажатия клавиши окна работает правильно, в моем случае событие datagrid срабатывало при выборе строки.

Вот код.

 List<Employee> empData = new List<Employee>();
 private Task task;
 private CancellationToken token;
 private CancellationTokenSource tokenSource;
 private string searchText = "";

KeyDownEvent:

    private void OnKeyDown(object sender, KeyEventArgs e)
    {
        if (task != null && tokenSource != null)
        {
            // cancel task
            tokenSource.Cancel();
            tokenSource = null;
            Console.WriteLine("Task cancel");
        }

        // Set condition for key
        string txt = new KeyConverter().ConvertToString(e.Key);
        if (txt.ToString().ToList().Any(x => !Char.IsLetterOrDigit(x)))
        {
            Console.WriteLine("Retrun from.");
            return;
        }

        searchText = searchText + new KeyConverter().ConvertToString(e.Key);
        Console.WriteLine("Search text : " + searchText);

        var item = empData.FirstOrDefault(x=>x.FirstName.StartsWith(searchText));
        if (item != null)
        {
            myGrid.SelectedItem = item;
            myGrid.UpdateLayout();
            myGrid.ScrollIntoView(myGrid.SelectedItem);
        }

        // create task for clean text
        Console.WriteLine("Task generate");
        tokenSource = new CancellationTokenSource();
        token = tokenSource.Token;
        task = new Task(()=> CleanSearchText(token), token);
        task.Start();

    }

Задача на чистый текст через некоторое время

    private void CleanSearchText(CancellationToken token)
    {
        // Throw if cancellation request
        token.ThrowIfCancellationRequested();
        // Wait for sometime for next key prss
        Thread.Sleep(400);
        // Do nothing if cancelation request
        if (token.IsCancellationRequested)
        {
            return;
        }
        Console.WriteLine("Clean text");
        searchText = "";
    }
04.01.2017

2

Это возможно. Простой пример для Datagrid: http://www.wpf-tutorial.com/datagrid-control/details-row/ Затем обработайте событие keydown в Datagrid.

<DataGrid Name="dgUsers" AutoGenerateColumns="False" KeyDown="DgUsers_OnKeyDown">

код позади простого:

private void DgUsers_OnKeyDown(object sender, System.Windows.Input.KeyEventArgs e)
        {
            foreach (var row in dgUsers.Items)
            {
                User user = (User) row;
                user.Name = e.Key.ToString();
                dgUsers.SelectedItem = row;
                break;
            }
        }
04.01.2017

3

Это уже встроено!

<DataGrid IsTextSearchEnabled="True" ...

Теперь просто позвольте методу модели «ToString» вернуть текст, который вы хотите найти — готово!

См. также https://msdn.microsoft.com/en-us/library/system.windows.controls.textsearch.aspx

10.01.2017
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..