Модераторы: gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Загрузка данных в comboBox из таблицы БД, как загрузить данные в comboBox? 
:(
    Опции темы
GMC
Дата 29.3.2007, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 12.12.2006

Репутация: нет
Всего: нет



При работе со справочниками возникла необходимость выборы данных из справочных таблиц, тоесть сделать выбор нужной информации из comboBox(а так же listBox). Проблема в том, чтобы загрузить все данные из таблица в comboBox(или listBox) для дальнейшего выбора нужной информации.

PM MAIL   Вверх
mr.DUDA
Дата 30.3.2007, 08:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



Вопрос слишком общий. Запрос в базу делать умеем ? Если да, получаем результат (ридером или в датасет адаптером подгружая), пробегаем по строкам результата и добавляем элементы в комбобокс/листбокс.


--------------------
user posted image
PM MAIL WWW   Вверх
GMC
Дата 30.3.2007, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 12.12.2006

Репутация: нет
Всего: нет



подключение/чтение/запись сделал, но со справочниками что то застрял.
mr.DUDA, если можно я бы хотел на код взглянуть, чтото у  меня не получается! :-( 
PM MAIL   Вверх
GMC
Дата 2.4.2007, 07:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 12.12.2006

Репутация: нет
Всего: нет



Напишите  ктонить код или лучше пример!!!
PM MAIL   Вверх
Idsa
Дата 2.4.2007, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



Цитата(GMC @  2.4.2007,  07:53 Найти цитируемый пост)
Напишите  ктонить код или лучше пример!!! 

Ты опиши конкретно (фразы "со справочниками застрял" - недостаточно), что именно тебе нужно, тогда, возможно, получишь ответ.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
mr.DUDA
Дата 2.4.2007, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



Цитата(GMC @  2.4.2007,  06:53 Найти цитируемый пост)
Напишите  ктонить код или лучше пример!!!

http://forum.vingrad.ru/index.php?showtopi...st&p=962849


--------------------
user posted image
PM MAIL WWW   Вверх
GMC
Дата 8.4.2007, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 12.12.2006

Репутация: нет
Всего: нет



После выполения кода listbox1 остается пустым, хотя заполняется в самой функции. DataReader заполняется(returnString = ClientNAme возвращает последнюю сторку из DataReader). Как возвратить тогда все данные из DataReader? Или как то можно подругому ?


 
Код

 public static string addcombobox()
        {
            string returnString="";
                     
            string connectionString = "datasource=localhost;username=root;password=mc;database=Customer";
            using (MySqlConnection connection = new MySqlConnection(connectionString))
            {
               
                string commandText = "Select ClientName from clients";

                
                    MySqlCommand command = new MySqlCommand(commandText, connection);
                    connection.Open();
                    using (MySqlDataReader reader = command.ExecuteReader()) 
                    {
                        while (reader.Read())
                        {
                            string ClientNAme = reader.GetString(0);
                            returnString = ClientNAme;
                            ListBox listBox1 = new ListBox();
                            listBox1.Items.Add(ClientNAme);
                                                                     
                            
                        }
                       // reader.Close();
                    }

                } 
            return returnString;
        }

private void button4_Click(object sender, EventArgs e)
        {
           
           textBox2.Text= addcombobox();
           listBox1.Refresh();
          
        }

 


PM MAIL   Вверх
mr.DUDA
Дата 8.4.2007, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



Цитата(GMC @  8.4.2007,  15:34 Найти цитируемый пост)
 ListBox listBox1 = new ListBox();

Лажа.


--------------------
user posted image
PM MAIL WWW   Вверх
Данкинг
Дата 8.4.2007, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: нет
Всего: 130



Цитата(mr.DUDA @ 30.3.2007,  09:50)
Вопрос слишком общий. Запрос в базу делать умеем ? Если да, получаем результат (ридером или в датасет адаптером подгружая), пробегаем по строкам результата и добавляем элементы в комбобокс/листбокс.

А других вариантов нет? Просто это хорошо для относительно небольших БД...


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
mr.DUDA
Дата 8.4.2007, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



Листбокс изначально не предназначен для отображения больших объёмов данных, т.к. строки добавляются все что есть (по одной или всем скопом). Нужно копать в сторону более экономичных и быстрых датагридов (не стандартного DataGrid !), желательно с поддержкой lazy load.


--------------------
user posted image
PM MAIL WWW   Вверх
emmanuil
Дата 9.4.2007, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 380
Регистрация: 9.1.2007

Репутация: 1
Всего: 3



Зачем цикл?

С DataReader'ом не пробовал, но с DataTable вот так:

Код

            ListBox lb; //твой ListBox
            SqlCommand command = new SqlCommand(commandText, connection);
            SqlDataAdapter da = new SqlDataAdapter(command);
            DataSet ds = new DataTable();
            connection.Open();
            da.Fill(ds);
            lb.DisplayMember = "<Название поля>"; // Это то что будет отображаться
            lb.ValueMember = "<Название поля>"; // это то что будет храниться
            lb.DataSource = ds.Tables[0].DefaultView;


таким образом можешь в lb.ValueMember запихивать ключ (к примеру ID), а потом доставать его. При работе с базой такое часто нужно, темболее, если ты делаешь справочники.

Добавлено через 1 минуту и 3 секунды
прошу прощения:
DataSet ds = new DataSet();

PM MAIL   Вверх
GMC
Дата 9.4.2007, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 12.12.2006

Репутация: нет
Всего: нет



все равно  listBox1 остается пустым.
emmanuil, может ошибка гденить? выложи полностью код.


Код

  public static void addcombobox()
        {
                 string connectionString = "datasource=localhost;username=root;password=mc;database=Customer";
            using (MySqlConnection connection = new MySqlConnection(connectionString))
            {

                string commandText = "Select ClientName from clients";

                ListBox listBox1 = new ListBox(); ; //твой ListBox
                            
                MySqlCommand command = new MySqlCommand(commandText, connection);
                MySqlDataAdapter da = new MySqlDataAdapter(command);
                DataSet ds = new DataSet();
                connection.Open();
                da.Fill(ds);
                listBox1.DisplayMember = "ClientName"; // Это то что будет отображаться
                listBox1.ValueMember = "ClientName"; // это то что будет храниться
                listBox1.DataSource = ds.Tables[0].DefaultView;
            }
        }

private void button4_Click(object sender, EventArgs e)
        {
               addcombobox();
               listBox1.Refresh();
          
        }


PM MAIL   Вверх
GMC
Дата 9.4.2007, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 12.12.2006

Репутация: нет
Всего: нет



все заработало после того как я передал компонент  listBox1 в addcombobox!


Код

        public void addcombobox(ListBox listBox1)
        {
            string returnString = "";

            string connectionString = "datasource=localhost;username=root;password=mc;database=Customer";
            using (MySqlConnection connection = new MySqlConnection(connectionString))
            {

                string commandText = "Select ClientName from clients";
                //ListBox listBox1 = new ListBox();

                MySqlCommand command = new MySqlCommand(commandText, connection);
                connection.Open();
                using (MySqlDataReader reader = command.ExecuteReader())
                {
                  
                    while (reader.Read())
                    {
                        string ClientNAme = reader.GetString(0);
                        returnString = ClientNAme;
                        listBox1.Items.Add(ClientNAme);
                        

                    }
                    reader.Close();
                }

            }
            
        }

    private void button4_Click(object sender, EventArgs e)
        {
            addcombobox(listBox1);
           
           listBox1.Refresh();
          
        }


Получается что он создавал виртуальный listBox1 ( ListBox listBox1 = new ListBox(), который никак не был связан с листбоксом на форме, поэтому данные и неотображались...
PM MAIL   Вверх
emmanuil
Дата 10.4.2007, 04:58 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 380
Регистрация: 9.1.2007

Репутация: 1
Всего: 3



Да, так и есть. Если ты хотел создавать, то нужо было бы указывать Parent размеры и положение и прочее. Только как я показал было бы лучше и быстрее! ListBox своими средствами загружает данные. ValueMember указывать не обязательно. Попробуй в DataSource указать свой DataReader, тоже должно работать, а цикл делать нужно в крайнем случае, если у контрола нет возможности загрузить данные самостоятельно! Удачи!
PM MAIL   Вверх
GMC
Дата 10.4.2007, 07:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 12.12.2006

Репутация: нет
Всего: нет



Дело в том что listBox1 у меня уже был на форме но в самой функции он был невидим, поэтому приходилось создавать его ListBox listBox1 = new ListBox(). Как сделать что бы он был видим в функции, что бы его не создавать так? 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.1073 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.