none
ComboBox быдлокод RRS feed

  • Вопрос

  • Добрый день!

    Хочу спросить вашего совета, у меня идет несколько комбобоксов в которых один и тотже датасорц, но проблема в том что если я в одном комбобоксе чтото выбираю то выбирается во всех которые используют тот же датасорц 8(. тоесть если у меня 5 комбобоксов и я в первом выберу 1 то 4 остальные тоже покажут 1 8(

    Вот метод 

     private void GetCols(string TableName)
            {
                SqlCommand cmd = new SqlCommand("select * from  INFORMATION_SCHEMA.COLUMNS where [table_name] = '" + TableName + "'", connection);
                using (SqlDataReader reader = cmd.ExecuteReader())
                {
                    //очишаем боксы чтоб обновилось
                    NameList.Clear();
                    DescriptList.Clear();
                    PriceList.Clear();
                    AvailList.Clear();
                    CategoryList.Clear();
                    nameComboBox.DataSource = null;
                    descComboBox.DataSource = null;
                    priceComboBox.DataSource = null;
                    categoryComboBox.DataSource = null;
                    avaliblComboBox.DataSource = null;
                    textBox1.ReadOnly = true;
                    textBox1.Clear();
                    while (reader.Read())
                    {
    
                        //Console.WriteLine(reader.HasRows);
                        for (int i = 0; i < reader.FieldCount; i++)
                        {
                            if (i == 3)
                            {
                                NameList.Add(reader.GetValue(i).ToString());
                                DescriptList.Add(reader.GetValue(i).ToString());
                                PriceList.Add(reader.GetValue(i).ToString());
                                CategoryList.Add(reader.GetValue(i).ToString());
                                AvailList.Add(reader.GetValue(i).ToString());
                                textBox1.AppendText(reader.GetValue(i).ToString() + "\n");
                            }
                        }
                    }
                }
    
                nameComboBox.DataSource = NameList;
                descComboBox.DataSource = DescriptList;
                priceComboBox.DataSource = PriceList;
                categoryComboBox.DataSource = CategoryList;
                avaliblComboBox.DataSource = AvailList;
            }
    Собственно мне пришлось создавать 5 отдельных списков 8(. А если учесть что мне прийдется еще и в датагрид комбобокс сунуть, а их там по разному может быть.... То картина печальная выходит 8(

    18 февраля 2013 г. 13:35

Ответы

  • Насколько я понял ваш код делает следующее:

    1. Делает выборку из таблицы

    2. Для каждой записи из таблицы добавляет во все комбобоксы ОДНО И ТО ЖЕ значение - значение 4-го по счету столбца.

    Если это то, поведение, которое вам нужно, то просто делайте так:

            public void AssignDatasources() {
                var ds = GetData("TableName", new SqlConnection());
    
                comboBox1.DataSource = new List<string>(ds);
                comboBox2.DataSource = new List<string>(ds);
                comboBox3.DataSource = new List<string>(ds);
                comboBox4.DataSource = new List<string>(ds);
            }
    
            private IEnumerable<string> GetData(string tableName, SqlConnection connection) {
                var ds = new List<string>();
                var cmd = new SqlCommand("select * from  INFORMATION_SCHEMA.COLUMNS where [table_name] = '" + tableName + "'", connection);
                using (var reader = cmd.ExecuteReader()) {
                    while (reader.Read()) {
                        for (int i = 0; i < reader.FieldCount; i++) {
                            if (i == 3) {
                                ds.Add(reader.GetValue(i).ToString());
                            }
                        }
                    }
                }
                return ds;
            }

    • Помечено в качестве ответа ZEONE 18 февраля 2013 г. 19:20
    18 февраля 2013 г. 14:09

Все ответы

  • Насколько я понял ваш код делает следующее:

    1. Делает выборку из таблицы

    2. Для каждой записи из таблицы добавляет во все комбобоксы ОДНО И ТО ЖЕ значение - значение 4-го по счету столбца.

    Если это то, поведение, которое вам нужно, то просто делайте так:

            public void AssignDatasources() {
                var ds = GetData("TableName", new SqlConnection());
    
                comboBox1.DataSource = new List<string>(ds);
                comboBox2.DataSource = new List<string>(ds);
                comboBox3.DataSource = new List<string>(ds);
                comboBox4.DataSource = new List<string>(ds);
            }
    
            private IEnumerable<string> GetData(string tableName, SqlConnection connection) {
                var ds = new List<string>();
                var cmd = new SqlCommand("select * from  INFORMATION_SCHEMA.COLUMNS where [table_name] = '" + tableName + "'", connection);
                using (var reader = cmd.ExecuteReader()) {
                    while (reader.Read()) {
                        for (int i = 0; i < reader.FieldCount; i++) {
                            if (i == 3) {
                                ds.Add(reader.GetValue(i).ToString());
                            }
                        }
                    }
                }
                return ds;
            }

    • Помечено в качестве ответа ZEONE 18 февраля 2013 г. 19:20
    18 февраля 2013 г. 14:09
  • Спасибо огромное за пример и объяснение, но все никак понять не могу почему так происходит, ведь я получаю запросом список колонок, ведь не единичное значение, то есть ответ запроса идет в список и всего один список на несколько контролов. У меня нету указаний чтоб при срабатывании хотя бы одного из них происходили какие либо изменения...(кроме того что я не указывал) Но почему они меняются тогда не в домек 8( Вся суть работы в том чтоб получить список таблиц выбрать нужную и получить список колонок.
    • Изменено ZEONE 18 февраля 2013 г. 19:21
    18 февраля 2013 г. 19:20
  • Это стандартное поведение WinForm контролов, если вы их соединяете с одним источником данных. Подробнее можете прочитать в данном разделе MSDN - Связывание элементов управления Windows Forms с данными
    19 февраля 2013 г. 3:12