Преобразование образца C # ObservableCollection в набор данных VB.NET или эквивалентный - PullRequest
0 голосов
/ 23 февраля 2011

У меня есть пример C #, который заполняет комбинированный список с несколькими выборками.Это было из примера, найденного в Интернете.Он отлично работает со статическими значениями из наблюдаемой коллекции.

Я хочу изменить это на управление базой данных из серверной части SQL Server, но возникли проблемы.Я получил его, чтобы заполнить поле со списком, но выбор действует как шутка.Вот пример кода, если кто-нибудь может помочь.Для этого достаточно простого типа запроса из таблицы Northwind, например: «Выбрать CategoryName из категорий».

Поэтому вопрос заключается в следующем: как преобразовать эту коллекцию ObservableCollection, чтобы использовать запрос из базы данных, а не статический список строк?используется в примере ниже?при реализации того же свойства изменились функциональные возможности.

class DataSource : INotifyPropertyChanged
{

    #region INotifyPropertyChanged Members

    public event PropertyChangedEventHandler PropertyChanged;
    private void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }

    #endregion

    private ObservableCollection<string> _animals = new ObservableCollection<string> { "Cat", "Dog", "Bear", "Lion", "Mouse", "Horse", "Rat", "Elephant", "Kangaroo", "Lizard", "Snake", "Frog", "Fish", "Butterfly", "Human", "Cow", "Bumble Bee" };

    public ObservableCollection<string> Animals
    {
        get { return _animals; }
    }

    private string _selectedAnimal = "Cat";
    public string SelectedAnimal
    {
        get { return _selectedAnimal; }
        set
        {
            _selectedAnimal = value;
            OnPropertyChanged("SelectedAnimal");
        }
    }

    private ObservableCollection<string> _selectedAnimals;
    public ObservableCollection<string> SelectedAnimals
    {
        get
        {
            if (_selectedAnimals == null)
            {
                _selectedAnimals = new ObservableCollection<string> { "Dog", "Lion", "Lizard" };
                SelectedAnimalsText = WriteSelectedAnimalsString(_selectedAnimals);
                _selectedAnimals.CollectionChanged +=
                    (s, e) =>
                    {
                        SelectedAnimalsText = WriteSelectedAnimalsString(_selectedAnimals);
                        OnPropertyChanged("SelectedAnimals");
                    };
            }
            return _selectedAnimals;
        }
        set
        {
            _selectedAnimals = value;
        }
    }

    public string SelectedAnimalsText
    {
        get { return _selectedAnimalsText; }
        set
        {
            _selectedAnimalsText = value;
            OnPropertyChanged("SelectedAnimalsText");
        }
    } string _selectedAnimalsText;


    private static string WriteSelectedAnimalsString(IList<string> list)
    {
        if (list.Count == 0)
            return String.Empty;

        StringBuilder builder = new StringBuilder(list[0]);

        for (int i = 1; i < list.Count; i++)
        {
            builder.Append(", ");
            builder.Append(list[i]);
        }

        return builder.ToString();
    }
}

1 Ответ

0 голосов
/ 08 июля 2011

Я не уверен, правильно ли я это понимаю, но ...

Рассматривали ли вы использование LINQ с объектом данных?

Добавить модель объекта данных ADO.NET в свойспроецируйте и используйте мастер для подключения к источнику данных.

Затем напишите оператор LINQ, который выбирает нужные столбцы из объекта Entity, и установите его как ItemSource

Пример:

myDataEntity Context = new myDataEntity();

List<Animals> myAnimals = new List<Animals>();
myAnimals = Context.Animals.ToList;

var myItemSource =
        from a in myAnimals
        select new { SelectedAnimal = a.animal, SelectedAnimalText = a.animaltext };

Оператор выбора LINQ создает анонимный тип, содержащий два поля в виде столбцов, если он установлен в качестве ItemSource, а именно: SelectedAnimal и SelectedAnimalText

Теперь просто установите свойство ItemSource в ComboBox

ComboBox.ItemsSource == myItemSource;

И вы сделали!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...