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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не сохраняются данные 
V
    Опции темы
EASports
  Дата 14.9.2010, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Добрый день. Замучала такая проблема: делаю сохранение в xls-файл из виндового приложения; программа содержит dataGridView с кучей столбцов и строк, при двойном щелчке на одной из строк открывается окно редактирования записи. Сделав все, что нужно, вызываю процедуру закрытия окна редактирования, сохранения изменений в dataGridView и записи изменений в файл *.xls. Для работы с этим файлом использую DataSet. После формирования запроса на обновление и заполнения всех его параметров вызываю myOleDbDataAdapter.Update(myDataSet). Дак вот, если вызывать процедуру формирования запроса откуда-либо кроме как с кнопки на форме, где датасет расположен, сохранение не работает (DataSet не апдейтится, хотя все параметры в порядке). Если же поставить вызов этой процедуры на кнопку на форме всё прекрасно работает. Вызов следующий:
Код

private void button1_Click_2(object sender, EventArgs e)
{
      if (kursantCommonGrid.CurrentRow != null)
           UpdateBase(kursantCommonGrid.CurrentRow.Index);
}

Процедура апдейта:
Код

public void UpdateBase(int rowNum)
        {
            // Строка подключения 
            string conStr = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=\"Excel 8.0;HDR=No\"; Data Source={0}", mainConfig.MainBaseFullName);

            OleDbConnection cn = new OleDbConnection(conStr);
            

            try
            {
                cn.Open();
                OleDbCommand cmd = cn.CreateCommand();
                OleDbDataAdapter ad = new OleDbDataAdapter(cmd);
                // конфигурация строки запроса на обновление информации
                string update_cmd_string = "update [kur2005$] set F2=@Fam," +
                    " F3=@Imya, F4=@Otch, F5=@DR, F6=@Chast, F7=@Podr, F8=@Obl, F9=@RVK, " +
                    " F10=@NG, F11=@SOC, F12=@Vozvr, " +
                    " F13=@DPriz, F14=@DPrib, F15=@Obr, F16=@Diag, " +
                    " F17=@Prim, F18=@GrSpec, F19=@Nation, F20=@NPU, F21=@PP, F22=@VtorGod, " +
                    " F23=@Privod, F24=@Sud, F25=@Lech, F26=@Uchet, F27=@Suicid, F28=@Narik, " +
                    " F29=@Zhenat, F30=@Porez, F31=@NPUvOVK, F32=@PPvOVK  , F33=@Unused1, " +
                    " F34=@UbilDPS, F35=@VSpec, F36=@O_Net, F37=@O_Umer, F38=@O_Pogib, F39=@O_Invalid, " + 
                    " F40=@O_Sud, F41=@O_Lech, F42=@O_Uchet, F43=@O_Suicid, F44=@O_Alco, " +
                    " F45=@O_Lishen, F46=@O_Prim, F47=@M_Prim, F48=@M_Net, F49=@M_Umer, F50=@M_Pogib, " + 
                    " F51=@M_Invalid, F52=@M_Sud, F53=@M_Lech, F54=@M_Uchet, F55=@M_Suicid, F56=@M_Alco, " + 
                    " F57=@M_Lishen, F58=@Dr_Net, F59=@Dr_Umer, F60=@Dr_Pogib, F61=@Dr_Invalid, F62=@Dr_Sud, " +
                    " F63=@Dr_Lech, F64=@Dr_Uchet, F65=@Dr_Suicid, " +
                    " F66=@Dr_Alco, F67=@Unused2 , F68=@Dr_Type, F69=@Dr_Prim, F70=@VO, F71=@Unused3Logic, F72=@Vzvod, " +
                    " F73=@About, F74=@Zvanie, F75=@GRVZ, F76=@Karaul, F77=@KO, F78=@PS " + 
                    " where F1=@ID";

                // присваиваем объекту строку запроса на обновление информации
                ad.UpdateCommand = new OleDbCommand(update_cmd_string, cn);

                // параметры
                OleDbParameter[] odbparam = new OleDbParameter[78];

                

                odbparam[0] = new OleDbParameter("@Fam", OleDbType.VarChar);
                odbparam[0].SourceColumn = "F2";
                odbparam[0].SourceVersion = DataRowVersion.Current;
                odbparam[0].Value = kursantCommonGrid.Rows[rowNum].Cells[1].Value;

                odbparam[1] = new OleDbParameter("@Imya", OleDbType.VarChar);
                odbparam[1].SourceColumn = "F3";
                odbparam[1].SourceVersion = DataRowVersion.Current;
                odbparam[1].Value = kursantCommonGrid.Rows[rowNum].Cells[2].Value;

                odbparam[2] = new OleDbParameter("@Otch", OleDbType.VarChar);
                odbparam[2].SourceColumn = "F4";
                odbparam[2].SourceVersion = DataRowVersion.Current;
                odbparam[2].Value = kursantCommonGrid.Rows[rowNum].Cells[3].Value;
               
               
                // ...


                odbparam[75] = new OleDbParameter("@KO", OleDbType.Boolean);
                odbparam[75].SourceColumn = "F77";
                odbparam[75].SourceVersion = DataRowVersion.Current;
                odbparam[75].Value = kursantCommonGrid.Rows[rowNum].Cells[76].Value;
                // 
                odbparam[76] = new OleDbParameter("@PS", OleDbType.Boolean);
                odbparam[76].SourceColumn = "F78";
                odbparam[76].SourceVersion = DataRowVersion.Current;
                odbparam[76].Value = kursantCommonGrid.Rows[rowNum].Cells[77].Value;

                // ID
                odbparam[77] = new OleDbParameter("@ID", OleDbType.Integer);
                odbparam[77].SourceColumn = "F1";
                odbparam[77].SourceVersion = DataRowVersion.Current;
                odbparam[77].Value = kursantCommonGrid.Rows[rowNum].Cells[0].Value;

                // присоединили все параметры к запросу
                foreach (OleDbParameter odbparameter in odbparam)
                {
                    ad.UpdateCommand.Parameters.Add(odbparameter);
                }
                // вызываем апдейт
                ad.Update(dataSet1);
                
            }
            finally
            {
                cn.Close();
            }
        }

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


Шустрый
*


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

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



смутно представляется что творится у тебя на форме, ты закрываешь форму прежде чем обновлять данный, на каком событие ты пытаешься обновить данные, пробовал ли ты дебажить это дело?
PM MAIL ICQ   Вверх
EASports
Дата 15.9.2010, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



вобщем я пробовал даже вешать на таймер то событие, которое с кнопки срабатывает. делал влажок, который устанавливается, когда форма редактирования закрывается и через 30 миллисекунд вызов события, которое на клик по кнопке висит. Один хрен не пашет. сейчас проследил и заметил следующее.
Вот в этом коде
Код

// Строка подключения 
            string conStr = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=\"Excel 8.0;HDR=No\"; Data Source={0}", mainConfig.MainBaseFullName);

            OleDbConnection cn = new OleDbConnection(conStr);
            

            try
            {
                cn.Open();
                OleDbCommand cmd = cn.CreateCommand();
                OleDbDataAdapter ad = new OleDbDataAdapter(cmd);
                // конфигурация строки запроса на обновление информации
                string update_cmd_string = "update [kur2005$] set F2=@Fam," +
                    " F3=@Imya, F4=@Otch, F5=@DR, F6=@Chast, F7=@Podr, F8=@Obl, F9=@RVK, " +
                    " F10=@NG, F11=@SOC, F12=@Vozvr, " +
                    " F13=@DPriz, F14=@DPrib, F15=@Obr, F16=@Diag, " +
                    " F17=@Prim, F18=@GrSpec, F19=@Nation, F20=@NPU, F21=@PP, F22=@VtorGod, " +
                    " F23=@Privod, F24=@Sud, F25=@Lech, F26=@Uchet, F27=@Suicid, F28=@Narik, " +
                    " F29=@Zhenat, F30=@Porez, F31=@NPUvOVK, F32=@PPvOVK  , F33=@Unused1, " +
                    " F34=@UbilDPS, F35=@VSpec, F36=@O_Net, F37=@O_Umer, F38=@O_Pogib, F39=@O_Invalid, " + 
                    " F40=@O_Sud, F41=@O_Lech, F42=@O_Uchet, F43=@O_Suicid, F44=@O_Alco, " +
                    " F45=@O_Lishen, F46=@O_Prim, F47=@M_Prim, F48=@M_Net, F49=@M_Umer, F50=@M_Pogib, " + 
                    " F51=@M_Invalid, F52=@M_Sud, F53=@M_Lech, F54=@M_Uchet, F55=@M_Suicid, F56=@M_Alco, " + 
                    " F57=@M_Lishen, F58=@Dr_Net, F59=@Dr_Umer, F60=@Dr_Pogib, F61=@Dr_Invalid, F62=@Dr_Sud, " +
                    " F63=@Dr_Lech, F64=@Dr_Uchet, F65=@Dr_Suicid, " +
                    " F66=@Dr_Alco, F67=@Unused2 , F68=@Dr_Type, F69=@Dr_Prim, F70=@VO, F71=@Unused3Logic, F72=@Vzvod, " +
                    " F73=@About, F74=@Zvanie, F75=@GRVZ, F76=@Karaul, F77=@KO, F78=@PS " + 
                    " where F1=@ID";

                // присваиваем объекту строку запроса на обновление информации
                ad.UpdateCommand = new OleDbCommand(update_cmd_string, cn);
          //.
          //.
          //. 

                // присоединили все параметры к запросу
                foreach (OleDbParameter odbparameter in odbparam)
                {
                    ad.UpdateCommand.Parameters.Add(odbparameter);
                }
                
                ad.Update(dataSet1);
                
            }
            finally
            {
                cn.Close();
            }

при дебаге программа не обращает внимания даже если я намеренно оставляю ошибки. Например я не открыл соединения (закомментарил строку cn.Open()) Программа этого даже не заметила, все сработало, но метод Update не вызвался. Строки как будто не несут смысловой нагрузки для компиллятора. Он их просто не исполняет. Блин. Может с конеткстом что... Даже на знаю. Очень странно.
PM MAIL   Вверх
EASports
Дата 15.9.2010, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Нашел ещё фишку. Если перед OleDbDataAdapter.Update()  вызвать DataSet.AcceptChanges(), то сохранение не происходит и при нажатии на кнопку на форме (до этого по ней срабатывало). Если убираем DataSet.AcceptChanges(), на кнопку работает, программно - не работает. Может дело с каким-нибудь фокусом контрола? Может в dataGridView какие-то события отменяют изменения или еще что?..
PM MAIL   Вверх
EASports
Дата 20.9.2010, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Все. Разобрался сам. Дело в фокусе. После каких-то действий с dataGridView, нужно по-любому перевести фокус на другой элемент. По-крайней мере я так сделал.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

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

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

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


 




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


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

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