Связывание пользовательских объектов и заполнение элементов управления уникальными значениями и т. Д. - PullRequest
1 голос
/ 07 марта 2012

У меня есть пользовательский объект, который получает значения из таблицы в БД. Давайте назовем это - Product table. Мой код заполняет List<Product> и связывается с несколькими выпадающими списками, используя myCombobox.DisplayMember = "Country" для отображения правильных значений.

Вот пример кода (ничего необычного, OnFormLoad ()).

DatabaseTools dbTools = new DatabaseTools();
List<Product> productList = dbTools.GetProducts();

cboCountry.BeginUpdate();
cboCountry.DataSource = productList ;
cboCountry.DisplayMember = "Country";
cboCountry.EndUpdate();

Достаточно просто. Однако некоторые значения, возвращаемые из базы данных, либо отсутствуют, дублируются, либо требуют форматирования строки, прежде чем они отобразятся в элементе управления. Есть ли способ сделать это. В противном случае данные в моих списках выглядят ужасно:

enter image description here

Ответы [ 2 ]

2 голосов
/ 07 марта 2012

Для предотвращения дублирования продукта используйте EqualityComparer:

 public class ProductCountryEqualityComparer : IEqualityComparer<Product>
    {

        #region IEqualityComparer<Product> Members

        public bool Equals(Product x, Product y)
        {
            return x != null && y != null && x.Country  == y.Country;
        }

        public int GetHashCode(Product obj)
        {
            return 0;
        }

        #endregion
    }

Тогда:

//That will make products distincts according to there Country
productList = productList.Distinct(new ProductCountryEqualityComparer()).ToList();

Для форматирования страны:

productList = productList.Distinct(new ProductCountryEqualityComparer())
              .Select(f => new Product() 
              {
               Country = string.Format(f.Country,"SomeFormat") 
              }).ToList();

На заказ:

productList = productList.Distinct(new ProductCountryEqualityComparer())
              .Select(f => new Product() 
              {
               Country = string.Format(f.Country,"SomeFormat") 
              }).OrderBy(f => f.Country).ToList();

Просто используйте последний:)

1 голос
/ 07 марта 2012

Почему бы не LINQ, избавляет от необходимости попадать в базу данных, и поскольку вы не используете уникальный идентификатор для объектов вашей страны, это должно работать ...

            List<string> countries = new List<string>() 
            { "Brazil", "Pakistan", "Pakistan", "Norway", "Senegal", "Senegal", "Senegal", };
            // Place into a LINQ query and utilise the distinct keyword
            var unique = (from c in countries
                          select c).Distinct().ToArray();
            // Test output
            Array.ForEach<string>(unique, x => Console.WriteLine(x));
            Console.ReadKey();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...