Эффективный поиск

541
23 декабря 2016, 11:43

Есть база данных предприятий 1000 записей Есть форма, в которой нужно выбрать одно из предприятий из списка и потом что-то с ним делать (не важно что) Как организовать эффективный выбор из такого кол-ва строк? Например они все находятся в комбобоксе и мы начинаем вводить название в комбобокс и у нас сразу отфильтровывает лишнее. Как сделать это отзывчиво и красиво ? Хотя бы натолкните на путь. Реализацию сам придумаю.

Answer 1

Использовать AutoComplete. Например поставить комбобоксу myCMB.AutoCompleteMode = AutoCompleteMode.SuggestAppend и AutoCompleteSource = AutoCompleteSource.CustomSource. Это позволит автоматически сортировать выпадающий список.

Answer 2

В Wpf я делал так: Xaml:

 <Label Content="Searched text:"/>
                <TextBox Grid.Column="1" Text="{Binding FilterString, UpdateSourceTrigger=PropertyChanged}"  />
            </Grid>
            <DataGrid Grid.Row="1" ItemsSource="{Binding Path=MyList, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="Name" Binding="{Binding Name, Mode=OneWay}" Width="40*" SortDirection="Ascending"/>
                    <DataGridTextColumn Header="Version" Binding="{Binding Version, Mode=OneWay}" Width="10*" />                    
                </DataGrid.Columns>
            </DataGrid>

Code:

    private ICollectionView _myList;
     public ICollectionView MyList
     {
        get { return _myList; }
        set
        {
           _myList = value;
           NotifyPropertyChanged("MyList");
        }
     }
    private string _filterString = string.Empty;
    public bool FilterTask(object value)
    {
       var entry = value as MyListModel;
       return entry != null && (string.IsNullOrEmpty(_filterString) || 
entry.DisplayName.ToLower().Contains(_filterString.ToLower()));
    }           
    public string FilterString
    {
      get { return _filterString; }
      set
      {
          _filterString = value;
           NotifyPropertyChanged("FilterString");
           if (_myList != null)
              _myList.Refresh();
       }
    }        

работает с 3000 записями быстро. Тут фильтром выступает текст бокс и фильтрует таблицу, но вы можете изменить реализацию под себя.

Ах да, в конструкторе при присваивании коллекции значений нужно указать:

MyList.Filter = FilterTask;
READ ALSO
Как сделать запрет на закрытие формы?

Как сделать запрет на закрытие формы?

Как сделать запрет на закрытие пользовательской формы?

324
Linq2Xml ограничение на загрузку из XML файла

Linq2Xml ограничение на загрузку из XML файла

Здравствуйте есть большой XML файл, более 500000 записей, из него часто приходится дергать корректировочную информациючтобы не грузить файл...

418
cefsharp не запоминает логин

cefsharp не запоминает логин

Подскажите, как в CefSharp сделать так, что бы при повторном входе появлялось окно с логином (пароль при этом не запоминать)

440
Направление зависимостей в приложении

Направление зависимостей в приложении

Вопрос состоит в том какие модули от чего зависят? Хочу разобрать на примере веб приложения (серверная часть)Используемая технология asp

360