powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Изменения в гриде->автоматически в базу
12 сообщений из 12, страница 1 из 1
Изменения в гриде->автоматически в базу
    #32311942
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как сделать так, чтобы когда юзер делает изменения в DataGrid они сразу апдэйтились в базу?
...
Рейтинг: 0 / 0
Изменения в гриде->автоматически в базу
    #32312010
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуй подписаться на событие CurrencyManager.ItemChanged и в нем вызывать adapter.Update(..);
...
Рейтинг: 0 / 0
Изменения в гриде->автоматически в базу
    #32312184
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Update с какими параметрами? у него есть разные варианты
...
Рейтинг: 0 / 0
Изменения в гриде->автоматически в базу
    #32312192
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так пробовал:
Но что примечательно, изменяю одну строку, дает в параметре
заполняет массив одной строкой, хорошо, изменяю следующую - уже пишет две строки, т.е. накапливает количество, а вот в базу так ничего и не пишет.

private void UpdateRows(DataRow[] row)
{
sqlConnection1.Open();
sqlDataAdapter1.Update(row); sqlConnection1.Close();
}
private void Row_Changed( object sender, DataRowChangeEventArgs e )
{
DataRow[] myDataRowArray = dataSet1.Tables[0].Select(null, null, DataViewRowState.ModifiedCurrent);
UpdateRows(myDataRowArray);
}
...
Рейтинг: 0 / 0
Изменения в гриде->автоматически в базу
    #32312219
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а команды на insert, update и delete опреелены в sqlDataAdapter1. если так, делай проще:
Код: plaintext
1.
2.
private void Row_Changed( object sender, DataRowChangeEventArgs e ) 
{ sqlDataAdapter1.Update(e.Row.Table);
}
если нет, то нужно их построить
...
Рейтинг: 0 / 0
Изменения в гриде->автоматически в базу
    #32312239
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странно, на первой же записи, которую редактировал и с нее сошел - ставит воскл. знак (concurrency violation: the updatecommand affectd 0 records).
На остальных уже ничего не ставит, но изменения так в базу и не попадают....
:-(

Може UpdateCommand как-то по-другому нужно создать?
...
Рейтинг: 0 / 0
Изменения в гриде->автоматически в базу
    #32312244
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот моя UpdateCommand:
Може при помощи exception можно отловить ошибку?

//
// sqlUpdateCommand1
//
this.sqlUpdateCommand1.CommandText = @"UPDATE globalparams SET param_name = @param_name, param_value = @param_value, param_description = @param_description WHERE (param_name = @Original_param_name) AND (param_value = @Original_param_value) AND (param_description = @Original_param_description); SELECT param_name,param_value, param_description FROM globalparams WHERE (param_name = @param_name)";
this.sqlUpdateCommand1.Connection = this.sqlConnection1;

this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@param_name", System.Data.SqlDbType.NVarChar, 128, "param_name"));

this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@param_value", System.Data.SqlDbType.NVarChar, 64, "param_value"));

this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@param_description", System.Data.SqlDbType.NVarChar, 128, "param_description"));

this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_param_name", System.Data.SqlDbType.NVarChar, 128, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "param_name", System.Data.DataRowVersion.Original, null));

this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_param_value", System.Data.SqlDbType.NVarChar, 64, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "param_value", System.Data.DataRowVersion.Original, null));

this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_param_description", System.Data.SqlDbType.NVarChar, 128, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "param_description", System.Data.DataRowVersion.Original, null));
...
Рейтинг: 0 / 0
Изменения в гриде->автоматически в базу
    #32312303
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
редактруемая запись не содержит полей с NULL ?
...
Рейтинг: 0 / 0
Изменения в гриде->автоматически в базу
    #32312780
nedonosok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Намыль вот сюда oxlopka4513@yahoo.com, что тебе не понятно, я тебе пришлю пример!
...
Рейтинг: 0 / 0
Изменения в гриде->автоматически в базу
    #32313650
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотелось бы в этом обработчике пройтись по дорожке и увидеть, где изменялись значения, а где нет, как это можно сделать?
Думаю поставить здесь апдэйт в базу для каждого cell.

private void Row_Changed( object sender, DataRowChangeEventArgs e )
{
foreach( DataColumn c in e.Row.Table.Columns )
{
Console.Write( "{0}\n",e.Row[c]);
}
}
...
Рейтинг: 0 / 0
Изменения в гриде->автоматически в базу
    #32313700
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это можно. факт то, что реально у тебя записи в DataSet изменяются, однако update в БД не проходит. это может быть в случае твоей ручной "оптимизации" запроса, где ты стер куски типа:
Код: plaintext
... AND ObjectTxt = @Original_ObjectTxt OR @Original_ObjectTxt IS NULL AND ObjectTxt IS NULL
делать этого не следует (см. BOL по поводу проверки поля на NULL - в твоем случае делается field=NULL что неверно)
...
Рейтинг: 0 / 0
Изменения в гриде->автоматически в базу
    #32313712
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В данном случае вопрос немного не в этом:
На сообщении я получаю дорожку, с которой ушел, все значения в колонках, все хорошо.
Мне нужно для каждой ячейки вызвать процедуру для изменения значения, это тоже нормально, поскольку датасет, грид заполняются вручную, так вот каждый раз при попадании в этот обработчик не хочется попусту делать апдэйты для всех колонок, ведь мы будем попадать сюда и в том случае, когда юзер просто щелкает по дорожкам ничего не изменяя.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Изменения в гриде->автоматически в базу
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]