Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TcxGrid.DataController не обновляет данные в связанном DataSet / 25 сообщений из 35, страница 1 из 2
07.12.2011, 12:38
    #37562778
CodeFine
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TcxGrid.DataController не обновляет данные в связанном DataSet
Здравствуйте!
Проблема странная - есть таблица cxGrid, при правке информации в ячейках таблицы через DataController (grLocal.DataController. Values[ARowInfo.RecordIndex,gr_Date.Index] := Date;) - в таблице всё изменяется и отображается прекрасно, но почему-то не изменяются данные в связанном Dataset и соответственно не происходит корректировки данных в БД... из-за чего может быть?? как исправить??? Какие должны быть настроены опции, чтобы DataController сам сразу после EndUpdate сам постил все изменения в Dataset???
...
Рейтинг: 0 / 0
07.12.2011, 16:50
    #37563472
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TcxGrid.DataController не обновляет данные в связанном DataSet
ошибка в 17ой строке
...
Рейтинг: 0 / 0
07.12.2011, 17:40
    #37563617
A V
A V
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TcxGrid.DataController не обновляет данные в связанном DataSet
DataController.DataModeController.SyncMode?
...
Рейтинг: 0 / 0
07.12.2011, 17:42
    #37563623
Sergij Gromov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TcxGrid.DataController не обновляет данные в связанном DataSet
X11,

опять прокладка виновата ...........
...
Рейтинг: 0 / 0
07.12.2011, 21:41
    #37564009
Gator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TcxGrid.DataController не обновляет данные в связанном DataSet
Sergij GromovX11,

опять прокладка виновата ...........Какая прокладка?! Ты о чём???
Виноват всегда Пушкин!
...
Рейтинг: 0 / 0
08.12.2011, 11:53
    #37564748
Sergij Gromov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TcxGrid.DataController не обновляет данные в связанном DataSet
Gator,

прокладка которая между монитором и стулом
...
Рейтинг: 0 / 0
08.12.2011, 12:05
    #37564791
CodeFine
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TcxGrid.DataController не обновляет данные в связанном DataSet
авторDataController.DataModeController.SyncMode
True

авторошибка в 17ой строке
опять прокладка виновата ....
Какая прокладка?! Ты о чём???
Виноват всегда Пушкин!
Ваш дешёвый пафос школьников совершенно не к месту, тк весь код выражается только одной строкой кода написанной в первом постинге, которая явно работает правильно - данные в таблице меняются как нужно, БОЛЬШЕ НИКАКОГО КОДА НЕТ. Далее работают лишь настройки объектов cxGrid и Dataset... сумеете осилить этот факт?

Вопрос темы как раз и заключается в том - какие настройки объектов cxGrid/Dataset могут мешать синхронизации данных из cxGrid.DataController в Dataset ???
...
Рейтинг: 0 / 0
08.12.2011, 12:37
    #37564910
Бектуров Роман
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TcxGrid.DataController не обновляет данные в связанном DataSet
а чё сразу в dataset не пишите ?
...
Рейтинг: 0 / 0
08.12.2011, 12:40
    #37564921
CodeFine
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TcxGrid.DataController не обновляет данные в связанном DataSet
Провёл такую проверку - откорректировал одну запись прямо в БД, а другую как написано выше в таблице через DataController.Values, затем проверил чему равен их Колонка.EditValue - оказывается для записи из БД всё верно, но для записи только что скорректированной кодом DataController.Values значение Колонка.EditValue=null ! То есть как будто даже в самой таблице эти данные-значения не изменились, а "только нарисовались в интерфейсе"... что за хрень может быть?
...
Рейтинг: 0 / 0
08.12.2011, 12:43
    #37564933
CodeFine
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TcxGrid.DataController не обновляет данные в связанном DataSet
автора чё сразу в dataset не пишите ?
Говорят, что если сразу в Dataset, то при изменении множества записей в таблице кодом курсор таблицы мигает и крутит таблицу... кроме того, после изменения в Dataset нужно обновлять таблицу. А так по цепочке через DataController таблицы -> Dataset -> DB наиболее логично было бы...
...
Рейтинг: 0 / 0
08.12.2011, 12:55
    #37564975
CodeFine
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TcxGrid.DataController не обновляет данные в связанном DataSet
Ещё интересное наблюдение - если в cxGrid.DataController поставить GridMode=True, то не только данные всё также не доходят до Dataset, но и вообще перестают отображаться в самой таблице... такое впечатление, что строка указанная в первом постинге вообще данные не изменяет... или же какие-то настройки cxGrid/Dataset не дают данным при изменении сохраниться (не Commit)...??
...
Рейтинг: 0 / 0
08.12.2011, 13:33
    #37565104
Бектуров Роман
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TcxGrid.DataController не обновляет данные в связанном DataSet
CodeFineавтора чё сразу в dataset не пишите ?
Говорят, что если сразу в Dataset, то при изменении множества записей в таблице кодом курсор таблицы мигает и крутит таблицу... кроме того, после изменения в Dataset нужно обновлять таблицу. А так по цепочке через DataController таблицы -> Dataset -> DB наиболее логично было бы...



как раз логично в dataset, а что б все работало нормально без морганий делаем так:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
dataset.disablecontrols;
try
  dataset.getbookmark...
  try
    ......................
  finally
    dataset.gotobookmark...
    dataset.freebookmark...
  end
finally
  dataset.enablecontrols;
end
...
Рейтинг: 0 / 0
08.12.2011, 13:39
    #37565117
CodeFine
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TcxGrid.DataController не обновляет данные в связанном DataSet
Дело в том, что не всегда к одному Dataset только одна таблица, иногда 2-3-5-10 таблиц может быть связано с одним Dataset, но отображать разные данные или иметь разные фильтры, поэтому хотелось бы соблюдать логический порядок и не блокировать общий Dataset. Возможно, так и придётся сделать, но всё же хотелось бы решить проблему темы...
...
Рейтинг: 0 / 0
08.12.2011, 13:57
    #37565174
Бектуров Роман
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TcxGrid.DataController не обновляет данные в связанном DataSet
проблема темы решается чтением хелпа :-)
лично мое мнение что правильно - править источник данных а не грид
...
Рейтинг: 0 / 0
08.12.2011, 14:28
    #37565260
CodeFine
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TcxGrid.DataController не обновляет данные в связанном DataSet
Ну так сделано в точности по примеру хелпа!
...
Рейтинг: 0 / 0
08.12.2011, 14:50
    #37565319
CodeFine
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TcxGrid.DataController не обновляет данные в связанном DataSet
Кроме того, если править в Dataset, то несколько усложняется поиск нужных для правки записей.
Пример - в Dataset 100'000 записей, в таблице с помощью фильтрации отобразили только 1000 записей. Из них выделили 100 записей которые нужно изменить. Через DataController можно простым перебором ++1 изменить все эти записи подряд. Но чтобы это же сделать через Dataset - нужно через DataController узнавать ID каждой выделенной записи, затем искать этот ID среди всех 100'000 записей Dataset - что должно оказаться значительно дольше и вообще кривее, нежели просто "изменить следующую запись в DataControler".
...
Рейтинг: 0 / 0
08.12.2011, 14:50
    #37565323
Esperito
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TcxGrid.DataController не обновляет данные в связанном DataSet
CodeFineили же какие-то настройки cxGrid/Dataset не дают данным при изменении сохраниться (не Commit)...??Нам отсюда твоих настроек не видно.
...
Рейтинг: 0 / 0
08.12.2011, 14:53
    #37565330
vavan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TcxGrid.DataController не обновляет данные в связанном DataSet
CodeFineчтобы это же сделать через Dataset - нужно через DataController узнавать ID каждой выделенной записи, затем искать этот ID среди всех 100'000 записей Dataset - что должно оказаться значительно дольше
а как по твоему датаконтроллер их будет править?
CodeFineи вообще кривее, нежели просто "изменить следующую запись в DataControler"
добрый совет: по максимуму обходись ср-вами датасета и наоборот по минимуму используй девэксовую машинерию только там где без нее либо не обойтись совсем либо дорого
...
Рейтинг: 0 / 0
08.12.2011, 15:04
    #37565364
CodeFine
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TcxGrid.DataController не обновляет данные в связанном DataSet
авторНам отсюда твоих настроек не видно.
Ну а как я тебе покажу все настройки??? Считай, что всё дефолт, а теперь предположи что может влиять на проблему...

автора как по твоему датаконтроллер их будет править?
DataController согласно примеру:
Код: pascal
1.
2.
3.
4.
5.
with grLocal.DataController do begin
    BeginUpdate;
    for i := 0 to GetSelectedCount - 1 do begin
      ARowIndex := GetSelectedRowIndex(I);
      ARowInfo := GetRowInfo(ARowIndex);


правит значения ищя номер записи в DataController'е, то есть в описаном dsit примере ища положим 100-ю запись из 1000 отображённых записей. Тогда как для того, чтобы найти эту запись в Dataset - нужно сначала сделать тоже самое - найти эту запись в DataController, затем выяснить для этой записи некий ЗаписьID, и затем ещё искать его уже из 100'000 всех записей Dataset'а... разница есть?
...
Рейтинг: 0 / 0
08.12.2011, 15:08
    #37565378
Gator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TcxGrid.DataController не обновляет данные в связанном DataSet
CodeFineНу а как я тебе покажу все настройки???Кусок dfm?
...
Рейтинг: 0 / 0
08.12.2011, 15:10
    #37565385
Esperito
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TcxGrid.DataController не обновляет данные в связанном DataSet
CodeFineНу а как я тебе покажу все настройки???С форматом dfm знаком?
CodeFineСчитай, что всё дефолт, а теперь предположи что может влиять на проблему...Тарифы на телепатию резко возросли после кризиса.
...
Рейтинг: 0 / 0
08.12.2011, 15:11
    #37565391
vavan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TcxGrid.DataController не обновляет данные в связанном DataSet
CodeFineразница есть?
ты не понял
датаконтроллер связанный с датасетом в процессе редактирования в момент поста куда данные помещает? ;)
...
Рейтинг: 0 / 0
08.12.2011, 15:11
    #37565393
CodeFine
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TcxGrid.DataController не обновляет данные в связанном DataSet
авторС форматом dfm знаком?CodeFine
Тарифы на телепатию резко возросли после кризиса.
Видимо дело не в телепатии, а том, что вы понятия не имеете что может влиять на описанную проблему...
...
Рейтинг: 0 / 0
08.12.2011, 15:16
    #37565404
CodeFine
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TcxGrid.DataController не обновляет данные в связанном DataSet
автордатаконтроллер связанный с датасетом в процессе редактирования в момент поста куда данные помещает? ;)
должен бы помещать в Dataset ;)
думаю разработчики этих компонент не совсем дебилы, и cxGrid.DataController хранит для каждой отображаемой в таблице cxGrid записи некий номер этой записи в Dataset, то есть ему не нужно искать записи в Dataset по некоему ЗаписьID, как это придётся делать в случае самописного кода... если это не так - напишите, только с доказательствами и ссылками на источники. Или пример кода чтобы при правке в Dataset этого не требовалось...
...
Рейтинг: 0 / 0
08.12.2011, 15:29
    #37565444
vavan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TcxGrid.DataController не обновляет данные в связанном DataSet
CodeFineдолжен бы помещать в Dataset
ура
CodeFineто есть ему не нужно искать записи в Dataset по некоему ЗаписьIDскажу больше: если у тебя не задан TcxDBDataController.KeyFieldNames то он не сможет твои изменения поместить в датасет
CodeFineесли это не так - напишите, только с доказательствами и ссылками на источникидоказывать я тебе понятно ничего не собираюсь но в качестве ссылки можешь использовать например хелп, сорцы и здравый смысл
CodeFineпример кода чтобы при правке в Dataset этого не требовалось
не совсем то что тебе нужно вероятно но почерпнуть я думаю пригодится
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
unsigned MarkSelectedRecords(HandleSelectedRecord const Handle, TcxCustomGridView * View, String const &CheckedFieldName=_T("Checked"))
{
	using vavan::PChar;
	size_t SelectedCnt;
	{
	TcxDBDataController * const dc = polymorphic_downcast<TcxDBDataController*>(View->DataController);
	SelectedCnt=dc->GetSelectedCount();
	if(!SelectedCnt)return 0;
	TVClientDataSet * const dsTarget=polymorphic_downcast<TVClientDataSet*>(dc->DataSource->DataSet);
	CPField fldChecked(BindField(dsTarget,CheckedFieldName));
	DISABLE_ENABLE_CONTROLS_CLONES(dsTarget);
	SAVE_RESTORE_PROPERTY(_T("OnCalcFields"),dsTarget,System::TMethod());
	SHOW_HIDE_BUSY(_T("Отмечаю записи"),SelectedCnt);
	DISABLE_ENABLE_CONSTRAINTS(dsTarget);
	SAVE_RESTORE_PROPERTY(_T("AggregatesActive"),dsTarget,false);
	SAVE_RESTORE_BOOKMARK(dsTarget);
	BEGIN_END_UPDATE(*View,lsimImmediate);
	if(dc->IsGridMode())
	{
		for(size_t i=0;i<SelectedCnt;++i)
		{
			TBookmarkStr bm=dc->GetSelectedBookmark(i);
//			if(/*dsTarget->BookmarkValid(const_cast<TBookmark>(bm.data()))*/true)
			{
				dsTarget->Bookmark=bm;
				DataSetEdit g(dsTarget);
				if(hsrMark==Handle || hsrInvert==Handle && !fldChecked->AsBoolean)
				{
					fldChecked->AsBoolean=true;
				}
				else
				{
					fldChecked->Clear();
				}
				g.Post();
				ProgressBusy();
			}
		}
	}
	else
	{
		SAVE_RESTORE_INDEX(dsTarget,dc->KeyFieldNames);
//		TVVarRec vr[1];
		TcxRowInfo RowInfo;
		for(size_t i=0;i<SelectedCnt;++i)
		{
			RowInfo=dc->GetRowInfo(dc->GetSelectedRowIndex(i));
//			vr[0]=dc->GetRecordId(RowInfo.RecordIndex);
			if(!dsTarget->Locate(dc->KeyFieldNames,dc->GetRecordId(RowInfo.RecordIndex),LocateOptionsAll))
			{
				throw Exception(NewFmtStr(_T("Record not found")));
			}

			DataSetEdit g(dsTarget);
			if(hsrMark==Handle || hsrInvert==Handle && !fldChecked->AsBoolean)
			{
				fldChecked->AsBoolean=true;
			}
			else
			{
				fldChecked->Clear();
			}
			g.Post();
			ProgressBusy();
		}
		dc->ClearSelection();
	}
	}
	return SelectedCnt;
}


CodeFineдумаю разработчики этих компонент не совсем дебилы
а вообще ты о них слишком хорошего мнения. хотя конечно до дебилизма им далеко
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TcxGrid.DataController не обновляет данные в связанном DataSet / 25 сообщений из 35, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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