Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.05.2012, 19:44   #1
emdroof
Пользователь
 
Аватар для emdroof
 
Регистрация: 11.04.2011
Сообщений: 46
По умолчанию как убрать повторения из combobox?

Здравствуйте! Проблема в следующем: я заполняю combobox данными из колонки таблицы sql, но там есть данные, которые повторяются и мне надо избавиться от этих повторений. В свойствах combobox'а вроде бы ничего не нашел, а как реализовать программно, не додумался. Кто может помочь?
emdroof вне форума Ответить с цитированием
Старый 18.05.2012, 20:46   #2
Гаврилов
Пользователь
 
Регистрация: 11.05.2012
Сообщений: 85
По умолчанию

Первое, что приходит в башню: не заполнять список комбобокса напрямую из базы данных, а сначала всасывать данные в массив, массив фильтровать, и уже после этого заполнять комбобокс из массива. Если речь идёт о кобмобоксе, то и памяти потребуется немного, да можно и освободить память, занятую массивом, после того, как он станет не нужен.
Это если по каким-нибудь причинам в SQL-запросе нельзя использовать DISTINCT для отсеивания дублированных данных, а если можно - то и вопроса нет.
Гаврилов вне форума Ответить с цитированием
Старый 18.05.2012, 23:02   #3
emdroof
Пользователь
 
Аватар для emdroof
 
Регистрация: 11.04.2011
Сообщений: 46
По умолчанию

попробую через массив, ибо я заполняю combobox не через sql запрос, а через binding source, и таким образом он тупо кидает все значения колонки в combobox
emdroof вне форума Ответить с цитированием
Старый 18.05.2012, 23:22   #4
Гаврилов
Пользователь
 
Регистрация: 11.05.2012
Сообщений: 85
По умолчанию

OK, это нетрудно.
Гаврилов вне форума Ответить с цитированием
Старый 19.05.2012, 01:49   #5
emdroof
Пользователь
 
Аватар для emdroof
 
Регистрация: 11.04.2011
Сообщений: 46
По умолчанию

Код:
object [] mas = comboBox1.Items.OfType<String>().Distinct().ToArray();
            comboBox1.Items.Clear();
            comboBox1.Items.AddRange(mas);
попробывал так, выдает ошибку Items collection cannot be modified when the DataSource property is set.

Последний раз редактировалось emdroof; 19.05.2012 в 01:59.
emdroof вне форума Ответить с цитированием
Старый 19.05.2012, 11:23   #6
Гаврилов
Пользователь
 
Регистрация: 11.05.2012
Сообщений: 85
По умолчанию

Вы всё-таки сразу заполняете комбобокс, потом его очищаете и вновь заполняете. Это некультурно. Когда-то на заре (но на самом деле не так уж давно), когда не было таких мощных методов работы с массивами данных, как сейчас, действительно иногда делали невидимый ListBox, например, чтобы потом выуживать из него данные. Но эти времена давно прошли.
С другой стороны, возможностей списочных стандартных элементов управления часто бывает недостаточно, чтобы хранить связанные с их пунктами другие данные, необходимые в программе,- поэтому всё равно приходится параллельно с этими элементами поддерживать некие массивы или "словари", привязанные к их пунктам.
Вы этим примером сами наглядно продемонстрировали, что прямая связь источника с элементом, отображающим данные, не всегда правильное решение (по сути дела, оно никогда не бывает таким гладким, как примеры в учебниках). Почему бы Вам не отказаться от этого и не заполнять источник типа DataSet или DataTable или DataView и уже оттуда заправлять свой комбобокс отфильтрованными данными, как я и посоветовал в самом начале? Можно для этого использовать LINQ, а можно воспользоваться и традиционными вложенными циклами - это при небольшом количестве данных сработает очень быстро.
Писать код вместо Вас я не буду, у меня тоже есть код, с которым у меня проблемы.
Как написал где-то Марк Твен: "Убедите свою голову пошевелить мозгами".
Гаврилов вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Убрать повтор записей в combobox Stian БД в Delphi 5 22.10.2012 19:49
Убрать повтор записей в combobox Stian БД в Delphi 3 13.04.2011 13:00
Как в Combobox убрать список? Alexi Компоненты Delphi 10 04.01.2011 08:25
Повторения в Combobox crit БД в Delphi 3 03.06.2009 17:10