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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблема с программой, нужен хелп 
:(
    Опции темы
Fyrklod
Дата 16.8.2007, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



щас попытаюсь объяснить в чем дело...

в Програме у меня есть такая ситуация происходит замена ПК... есть талица хранящая просто кабинеты(пусть в ней есть уже 303 кабинет и 904)(назавем эту таблицу PLACE) и таблица хранящая данные по ПК поля в ней ПК, место установки (кабинет) (DatePC)....  (пусть в нее забито ws4 в 303, ws5 B 904)... меняю положение компа...

переношу ws4 B 808
т.к. в таблице с кабинетами нет 808, то разумеется ИНСЕРТ добавляю его в Place, а потом АДЕЙТ поля хранящего даные о ПК ws4 в DatePC...
а если бы я ws4 переносил бы 904 тогда произошел бы просто апдейт DatePC...

реализовываю я это так 
Код

                try
                {
                    com = String.Format("INSERT INTO Place (place) Value ('{0}')",PlaceText.Text);
                    data = new DataTable();
                    da = new MySqlDataAdapter(com, conn);
                    cb = new MySqlCommandBuilder(da);
                    da.Fill(data);

                    com = String.Format("UPDATE DatePC SET place = '{0}' WHERE IP = '{1}'", PlaceText.Text, LOGIN.Text);
                    data = new DataTable();
                    da = new MySqlDataAdapter(com, conn);
                    cb = new MySqlCommandBuilder(da);
                    da.Fill(data);
                    DGV.DataSource = data;
                }
                catch
                {
                    com = String.Format("UPDATE DatePC SET place = '{0}' WHERE IP = '{1}'", PlaceText.Text, LOGIN.Text);
                    data = new DataTable();
                    da = new MySqlDataAdapter(com, conn);
                    cb = new MySqlCommandBuilder(da);
                    da.Fill(data);
                    DGV.DataSource = data;

                    MessageBox.Show(DGV.Columns["NUM"].HeaderText + DGV.Columns["Place"].HeaderText + DGV.Columns["DateSb"].HeaderText);
                }


и происходит глюк.... в DataGrid 'e уничтожаются заранее созданные мною колумнсы.... на что указывает 
Код

                    MessageBox.Show(DGV.Columns["NUM"].HeaderText + DGV.Columns["Place"].HeaderText + DGV.Columns["DateSb"].HeaderText);


ну кроме этой части указывает на удаление тот факт что до выполнения кода TextHeder 'ы это грида у меня русские, а после выполнения реальные названия полей с моей базы (MySQL)
user posted image
В чем может быть проблема?


Это сообщение отредактировал(а) Fyrklod - 16.8.2007, 15:04
--------------------
Зачем компьютеры пищат, когда нажимаешь сразу много клавиш? Чтобы будить уснувших на клавиатуре программистов!
PM MAIL   Вверх
Experimenter
Дата 17.8.2007, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Дык у тебя в catch вываливается, что ж ты ошибку не отобразишь? Может, в ней все и дело!


--------------------
public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){
    if(zlo1 < zlo2) return zlo1;
    else if(zlo1 > zlo2) return zlo2;
    else throw new Exception("Kill yourself by the wall"); }
PM WWW ICQ   Вверх
Fyrklod
Дата 17.8.2007, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



я проверял случай когда заполнение по try 'ю проходило и когда по catch' y... результат тот же... когда в try заходил, он нормально делал вставку и замену и выходил из него.... на ошибку никакого намека, а название колонок уже менялись, точнее просто мои колумнсы удалялись
--------------------
Зачем компьютеры пищат, когда нажимаешь сразу много клавиш? Чтобы будить уснувших на клавиатуре программистов!
PM MAIL   Вверх
Idsa
Дата 17.8.2007, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Fyrklod @  16.8.2007,  14:21 Найти цитируемый пост)
и происходит глюк.... в DataGrid 'e уничтожаются заранее созданные мною колумнсы.... на что указывает 

Колонки не удаляются. Если в таблице есть колонка с именем столбца БД (или алиаса), то данные загружаются именно в нее, при этом меняется Caption на то самое имя столбца (или алиаса).
Выхода 2: 1) быстрый и 2) правильный.
1) Быстрый - поменять вручную после Fill() свойства Caption всех столбцов. Однако, такой подход не является правильным, потому что может повлечь за собой проблемы при поддержке и расширении проекта.
Код

SqlDataAdapter adapter = new SqlDataAdapter(commandText, connectionString);
            DataTable table = new DataTable();
            adapter.Fill(table);
            table.Columns["id"].Caption = "Инвертарный номер";
            ... //аналогично для остальный полей

2) Воспользуемся mapping'ом (aliasing'ом):
Необходимо добавить using System.Data.Common.
Код

DataColumnMapping idMapping = new DataColumnMapping("id", "Инвертарный номер");
... //так же для остальных полей
            DataTableMapping tableMapping = new DataTableMapping("test1", "table"); //первый параметр - имя таблицы в БД, второй параметр - имя таблицы в DataSet (или имя отдельно взятой таблицы)
            tableMapping.ColumnMappings.Add(idMapping);
... // аналогично для других полей
            adapter.TableMappings.Add(tableMapping);

Данный код необходимо вставить до заполнения таблицы, т. к. адаптер при выполнении метода Fill() будет учитывать созданные нами алиасы.

Это сообщение отредактировал(а) Idsa - 17.8.2007, 19:25


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


Шустрый
*


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

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



Цитата(Idsa @  17.8.2007,  19:16 Найти цитируемый пост)
Колонки не удаляются. Если в таблице есть колонка с именем столбца БД 

Объясни тогда почему на
Код

MessageBox.Show(DGV.Columns["NUM"].HeaderText + DGV.Columns["Place"].HeaderText + DGV.Columns["DateSb"].HeaderText);

до кода никаких ошибок... показывает что Columns 'ы с именем NUM и Place и DateSb существуют, а после кода кричит что таких нет.......


Это сообщение отредактировал(а) Fyrklod - 17.8.2007, 22:35
--------------------
Зачем компьютеры пищат, когда нажимаешь сразу много клавиш? Чтобы будить уснувших на клавиатуре программистов!
PM MAIL   Вверх
Idsa
Дата 18.8.2007, 06:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Я не могу ручаться за твой код. Может, ты действительно где-нибудь удаляешь колонки. Выше я всего лишь объяснил наиболее вероятную причину подобного поведения.


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


Шустрый
*


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

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



Все, всем спасибо кто пытался помчь... проблема решена, еще раз спасибо и топик.Close();
--------------------
Зачем компьютеры пищат, когда нажимаешь сразу много клавиш? Чтобы будить уснувших на клавиатуре программистов!
PM MAIL   Вверх
Experimenter
Дата 21.8.2007, 06:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А как решил-то, если не секрет?


--------------------
public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){
    if(zlo1 < zlo2) return zlo1;
    else if(zlo1 > zlo2) return zlo2;
    else throw new Exception("Kill yourself by the wall"); }
PM WWW ICQ   Вверх
Fyrklod
Дата 24.8.2007, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



да не такая уж и проблема оказалась
в try у меня есть
Код
DGV.DataSource = data;

ну а после этой строки в реальном коде (а не в том что я дал.. по причине чтобы некоторые строки не мешали) шел метод обновления БД в которой тоже была строка
Код
DGV.DataSource = data;


ну в общем и получалось что полсе первой DGV.DataSource = data; и проходил сбой в программе...
В отладчике заметил после какой строки происходило удаление колумнсов, закоментировал ее и увидел нормальный результат программы... вот и удалил... все решение проблемы
--------------------
Зачем компьютеры пищат, когда нажимаешь сразу много клавиш? Чтобы будить уснувших на клавиатуре программистов!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

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

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

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


 




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


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

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