проблема с программой

 
0
 
.NET
ava
Fyrklod | 16.08.2007, 15:21
щас попытаюсь объяснить в чем дело...

в Програме у меня есть такая ситуация происходит замена ПК... есть талица хранящая просто кабинеты(пусть в ней есть уже 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
В чем может быть проблема?
Ответы (8)
ava
Experimenter | 17.08.2007, 18:24 #
Дык у тебя в catch вываливается, что ж ты ошибку не отобразишь? Может, в ней все и дело!
ava
Fyrklod | 17.08.2007, 18:33 #
я проверял случай когда заполнение по try 'ю проходило и когда по catch' y... результат тот же... когда в try заходил, он нормально делал вставку и замену и выходил из него.... на ошибку никакого намека, а название колонок уже менялись, точнее просто мои колумнсы удалялись
ava
Idsa | 17.08.2007, 19:16 #
Цитата (Fyrklod @ 16.8.2007, 14:21 findReferencedText)
и происходит глюк.... в 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() будет учитывать созданные нами алиасы.
ava
Fyrklod | 17.08.2007, 22:35 #
Цитата (Idsa @ 17.8.2007, 19:16 findReferencedText)
Колонки не удаляются. Если в таблице есть колонка с именем столбца БД

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

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

до кода никаких ошибок... показывает что Columns 'ы с именем NUM и Place и DateSb существуют, а после кода кричит что таких нет.......
ava
Idsa | 18.08.2007, 06:41 #
Я не могу ручаться за твой код. Может, ты действительно где-нибудь удаляешь колонки. Выше я всего лишь объяснил наиболее вероятную причину подобного поведения.
ava
Fyrklod | 20.08.2007, 08:59 #
Все, всем спасибо кто пытался помчь... проблема решена, еще раз спасибо и топик.Close();
ava
Experimenter | 21.08.2007, 06:12 #
А как решил-то, если не секрет?
ava
Fyrklod | 24.08.2007, 18:19 #
да не такая уж и проблема оказалась
в try у меня есть
DGV.DataSource = data;

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


ну в общем и получалось что полсе первой DGV.DataSource = data; и проходил сбой в программе...
В отладчике заметил после какой строки происходило удаление колумнсов, закоментировал ее и увидел нормальный результат программы... вот и удалил... все решение проблемы
Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
advanced
Отправить