Добрый день. Замучала такая проблема: делаю сохранение в 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(); } }
|
|