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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> DataBinding ComboBox, проблема с добавлением 
:(
    Опции темы
avlzll
Дата 27.12.2009, 05:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Приветствую.

Имеется форма на которой расположен комбобокс и куча всяких текстбоксов.

Комбобокс заполнен данными из БД так:

Код

        private DataViewManager dviewmanager;       

                    MySqlCommand cmCars = new MySqlCommand("SELECT *  FROM car", connection);
                    daCars = new MySqlDataAdapter(cmCars);

                    daCars.TableMappings.Add("Table", "car");
                    daCars.Fill(ds, "car");

                    this.dviewmanager = ds.DefaultViewManager;                    
                    this.comboBox1.DataSource = this.dviewmanager;
                    this.comboBox1.DisplayMember = "car.carRegNum";


Соответственно при смене значения в комбобоксе данные во всех текстбоксах на форме тоже меняются:

Код

                    this.textBox1.DataBindings.Add("Text", this.dviewmanager, "car.carRegNum");
                    this.textBox2.DataBindings.Add("Text", this.dviewmanager, "car.carVIN");

Все это дело естественно вызывается сразу при старте программы, чтобы пользователь сразу видел заполненные поля.

 
На этой же форме я прикрутил кнопку "Очистить все поля", которая делает всем полям .Text = string.Empty; и кнопку "Добавить новую запись".

Код

using (MySqlConnection connection = new MySqlConnection(GetConnectionString()))
                {
                    try
                    {
                        connection.Open();
                        string queryString = "INSERT INTO car (carRegNum, carVIN) VALUES (@carRegNum, @carVIN)";
                        MySqlCommand cmd = new MySqlCommand(queryString, connection);

                        cmd.Parameters.Add("@carRegNum", MySqlDbType.VarChar, 7);
                        cmd.Parameters["@carRegNum"].Value = textBox1.Text;

                        cmd.Parameters.Add("@carVIN", MySqlDbType.Int32);
                        cmd.Parameters["@carVIN"].Value = Convert.ToInt32(textBox2.Text);

                        cmd.CommandType = CommandType.Text;
                        cmd.ExecuteNonQuery();

                        DataRow anyRow = ds.Tables["car"].NewRow();

                        anyRow["carRegNum"] = textBox1.Text;
                        anyRow["carVIN"] = textBox2.Text;

                        ds.Tables["car"].Rows.Add(anyRow);
                    }
                }



Проблема. Чтобы добавить новую запись надо нажать на Очистку(этот самый комбобокс тоже очищается), ввести значения и нажать на "Добавить". Но когда я после очистки ввожу данные программа все еще думает (и вполне справедливо, кстати), что я изменяю информацию о выбранном в комбобоксе итеме. INSERT в саму базу то проходит без проблем, а вот в датасете получается две одинаковых записи, одна, которая была добавлена кодом из кнопки "Добавить", и вторая, которая получилась затиранием той, которая была выбрана в комбобоксе. Не имею ни малейшего представления как сбросить этот databinding со всех полей на время по-нормальному. В этом загвоздка.
После поиска в сети есть предложения: а) добавить пустую строку в сам датасет руками, б) добавить пустую запись непосредственно в бд 
Эти варианты особо не подходят, т.к. есть еще DataGridView, в котором отображены те же самые данные, и пустая строка там будет выглядеть немного странно, плюс ко всему среди вводимых данных есть еще два внешних ключа, которые естественно not null. В общем...

Если кто понял, что я имел ввиду, то может пнете в нужном направлении. А то я уже дошел до того, что придумал в качестве выхода из этой ситуации наплодить еще такиж же точно текстбоксов и на время "Добавления" делать их видимыми, а те, которые были до этого  - невидимыми.  smile 



PM MAIL   Вверх
avlzll
Дата 27.12.2009, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Решил тем, что стал сбрасывать Binding со всех полей перед добавлением
Код

this.textBox1.DataBindings.Clear();


и восстанавливать его после.

Криво, конечно, но вроде работает как надо сейчас.

Это сообщение отредактировал(а) avlzll - 27.12.2009, 13:00
PM MAIL   Вверх
thomas
Дата 27.12.2009, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

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



avlzll
Приветствую.
Раз вы работаете с DataSet, то рекомендую обратить внимание на этот метод.



--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

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

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

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


 




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


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

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